2017-03-13 2 views
3

Donc voici mon problème. J'ai construire cette interface simple en XAMLcomment puis-je lier les formes que j'ai définies dans le code dans une colonne de grille de données?

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication2" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="302" Width="253.8"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"></RowDefinition> 
      <RowDefinition Height="*"></RowDefinition> 
     </Grid.RowDefinitions> 
     <StackPanel> 
      <Label Target="{Binding ElementName=txtbxName}">_Cerca una lista</Label> 
      <TextBox Text="{Binding SearchText, UpdateSourceTrigger=PropertyChanged}" ToolTip="Inserisci il nome di una lista per filtrare l'elenco"/> 
      <DataGrid CanUserAddRows="False" x:Name="dg" ItemsSource="{Binding MyFilteredItems}" AutoGenerateColumns="False" HorizontalAlignment="Right" Margin="0,0,1.2,0" > 
       <DataGrid.Columns> 
        <DataGridTemplateColumn Width="*"> 
         <DataGridTemplateColumn.Header > 
          <CheckBox HorizontalContentAlignment="Center" Checked="IsChecked" Unchecked="IsUncheck" ToolTip="Seleziona/Deseleziona tutto"/> 
         </DataGridTemplateColumn.Header> 
         <DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <CheckBox x:Name="c1" HorizontalAlignment="Stretch" IsChecked="{Binding Check}" /> 
          </DataTemplate> 
         </DataGridTemplateColumn.CellTemplate> 
        </DataGridTemplateColumn> 
        <DataGridTextColumn Binding="{Binding Name}"> 
         <DataGridTextColumn.Header>Name</DataGridTextColumn.Header> 
        </DataGridTextColumn> 
        <DataGridTextColumn Binding="{Binding Dimension}"> 
         <DataGridTextColumn.Header>Dimensione</DataGridTextColumn.Header> 
        </DataGridTextColumn> 
        <DataGridTextColumn Binding="{Binding Colour}"> 
         <DataGridTextColumn.Header>Colour</DataGridTextColumn.Header> 
        </DataGridTextColumn> 
       </DataGrid.Columns> 
      </DataGrid> 
     </StackPanel> 
     <Button HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,0,0,35.4" Grid.Row="1" Width="60">Applica</Button> 
     <Button HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="10,0,0,35.4" Grid.Row="1" Width="60">Nascondi</Button> 
     <Button HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="10,0,0,35.4" Grid.Row="1" Width="60">Cancella</Button> 
    </Grid> 
</Window> 

Ma grille prendre les données à partir d'une collection observable d'une classe fait comme ceci:

public class Righe : INotifyPropertyChanged 
     { 
      private bool check; 

      public event PropertyChangedEventHandler PropertyChanged; 

      public bool Check 
      { 
       get { return check; } 
       set 
       { 
        check = value; 

        OnPropertyChanged("Check"); 
       } 
      } 
      public string Name { get; set; } 
      public string Dimension { get; set; } 
      public Rectangle rect; 
      public void OnPropertyChanged(string name) 
      { 
       if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(name)); 
      } 
     } 

Je veux, au lieu de <DataGridTextColumn Binding="{Binding Colour}"> <DataGridTextColumn.Header>Colour</DataGridTextColumn.Header> </DataGridTextColumn>

une colonne avoir dans chaque cellule la forme rectangle que j'ai définie dans ma classe. Comment puis je faire ça?

Répondre

0

À mon avis, cette approche est mauvaise parce qu'elle ne correspond pas à la MVVM, mais si vous savez ce que vous faites vous pouvez utiliser DataGridTemplateColumn

 <DataGridTemplateColumn> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ContentControl Content="{Binding rect}" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn>