Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将自定义列类型添加到wpf数据网格?_Wpf_Datagrid_Wpf Controls - Fatal编程技术网

如何将自定义列类型添加到wpf数据网格?

如何将自定义列类型添加到wpf数据网格?,wpf,datagrid,wpf-controls,Wpf,Datagrid,Wpf Controls,我目前有一个绑定的datagrid,它正在自动生成列 <DataGrid x:Name="dataGrid" ItemsSource="{Binding TestRows}" HeadersVisibility="All" GridLinesVisibility="Vertical&quo

我目前有一个绑定的datagrid,它正在自动生成列

<DataGrid x:Name="dataGrid" 
                      ItemsSource="{Binding TestRows}"
                      HeadersVisibility="All"
                      GridLinesVisibility="Vertical" 
                      BorderBrush="Gray" 
                      BorderThickness="5"
                      IsReadOnly="False"
                      CanUserResizeColumns="False"
                      CanUserSortColumns = "True"
                      HorizontalScrollBarVisibility="Visible"  
                      VerticalScrollBarVisibility="Visible"
                      SelectionMode="Single"
                      AutoGenerateColumns="True"
                      AutoGeneratingColumn="dataGrid_AutoGeneratingColumn">
...
...
...
</DataGrid>

...
...
...
自动生成对字符串和整数非常有效,但我在数据集合中的项上还有一个
Dictionary
类型的对象。字典对
TestRows
中的每个项目都有相同的键,但内容不同

我希望datagrid为字典中的每个键动态添加一个自定义的
DataGridTemplateColumn
,使用值中的特定属性作为单元格值。我怀疑我可以在
dataGrid\u AutoGeneratingColumn
中为此添加一些内容,但我找不到这样做的方法

我如何才能实现上述目标


TestRows是对象的ObservableCollection,集合中每个对象有一行。数据网格会自动为对象中的每个字符串和int生成一列,这就是我想要的。然而,我在对象中也有一个字典。字典在TestRows中的每个对象中都有相同的键,但我不知道这些键在运行时之前是什么

AutoGeneratingColumn
是在设置了
ItemsSource
之后引发的,这样您就可以处理
AutoGeneratingColumn
如下:

private void dataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyName == nameof(YourClass.YourDictionaryPropertyName))
    {
        e.Cancel = true;
        DataGrid dataGrid = (DataGrid)sender;
        IList sourceCollection = dataGrid.ItemsSource as IList;
        MyClass firstItem = sourceCollection?[0] as MyClass;
        foreach (var key in firstItem.YourDictionaryPropertyName.Keys)
        {
            dataGrid.Columns.Add(new DataGridTextColumn { Header = "...", Binding = new Binding($"{nameof(YourClass.YourDictionaryPropertyName)}"[{key}]") });
        }
    }
}
…其中,
YourClass
是“TestRows”中的一项:

公共类您的类
{
公共词典YourDictionaryPropertyName{get;}
...
}

对于哪个词典中的每个键?所有行只有一列,但每行都有一个dictionary属性,不是吗?那么您指的是哪个词典呢?TestRows是一个对象的ObservableCollection,集合中每个对象有一行。数据网格会自动为对象中的每个字符串和int生成一列,这就是我想要的。然而,我在对象中也有一个字典。字典在TestRows中的每个对象中都有相同的键,但我不知道这些键在运行时之前是什么。我想基于此字典动态生成列。
public class YourClass
{
    public Dictionary<string, string> YourDictionaryPropertyName { get; }
    ...
}