支持DataGrid中的动态属性

时间:2013-07-14 17:43:12

标签: c# datagrid dynamic-properties

我有一个简单的DataGrid,看起来像这样

<DataGrid ItemsSource="{Binding GridList}">
   <DataGrid.RowStyle>
      <Style TargetType="{x:Type DataGridRow}">
         <Setter Property="Height" Value="Auto" />
         <Setter Property="Background" Value="Black" />
      </Style>
   </DataGrid.RowStyle>
   <DataGrid.Columns>
      <DataGridTemplateColumn>
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
               <Grid>
                  <Grid.ColumnDefinitions>
                     <ColumnDefinition />
                  </Grid.ColumnDefinitions>
                  <TextBlock Grid.Column="0" Text="{Binding ID}" />
               </Grid>
            </DataTemplate>
         </DataGridTemplateColumn.CellTemplate>
      </DataGridTemplateColumn>
   </DataGrid.Columns>
</DataGrid>

但现在我想在TextBlock中添加另一个DataTemplate,看起来像这样

<TextBlock Grid.Column="1" Text="{Binding Values["Entity1"]}" />

<TextBlock Grid.Column="1" Text="{Binding Values.Entity1}" />

但是我无法让它工作,实际上我不知道如何创建最后一个所以它会起作用

List的模型看起来像这样

class ListModel {
   public int ID {get;set;}
   public IDictionary<string, string> Values {get;set;}
}

当然我可以将IDictionary替换为其他东西但是什么?

1 个答案:

答案 0 :(得分:0)

实际上我想通了,我将ListModel改为

class ListModel {
   public string this[string key] { get{return _values[key];} set{_values[key]=value;}}
   public int ID{get;set;}
   public IDictionary<string,string> _values = new Dictionary<string,string>();
}

和XAML

<TextBlock Grid.Column="1" Text="{Binding [Entity1]}" />