Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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
C# 使用ItemsSource对象中的属性作为要显示的属性_C#_Wpf_Xaml_Mvvm_Datagrid - Fatal编程技术网

C# 使用ItemsSource对象中的属性作为要显示的属性

C# 使用ItemsSource对象中的属性作为要显示的属性,c#,wpf,xaml,mvvm,datagrid,C#,Wpf,Xaml,Mvvm,Datagrid,我想将ViewModels列表绑定到数据网格,然后使用ViewModel上的属性显示在数据网格的内容中 假设我有以下ViewModel: public class TableWrapperViewModel { public object SourceTable { get; set; } //An unknown type, auto generate the columns. public bool HasBeenDealtWith { get; set; } //

我想将ViewModels列表绑定到
数据网格
,然后使用ViewModel上的属性显示在
数据网格
的内容中

假设我有以下ViewModel:

public class TableWrapperViewModel
{
    public object SourceTable { get; set; }     //An unknown type, auto generate the columns.
    public bool HasBeenDealtWith { get; set; }  //Used to control the row style.
}
在视图中,我将一个
数据网格
绑定到一个
可观察收集表

<DataGrid ItemsSource="{Binding Tables}">
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <DataTrigger Binding="{Binding HasBeenDealtWith}" Value="True">
                    <Setter Property="Background" Value="#BCFF77"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding HasBeenDealtWith}" Value="False">
                    <Setter Property="Background" Value="#FF7777"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
</DataGrid>

结果如下所示。行高亮显示,但
SourceTable
显示为一列(如预期)。

是否有一种方法可以仅显示
DataGrid
中的
SourceTable
属性,同时保持对
HasBeenDealtWith
的访问,以进行样式设置?
DataGrid
必须能够为
souetable
对象动态生成列

结果应如下所示,但高亮显示仍保持不变:

属性
[显示(AutoGenerateField=false)]
在这方面有什么好处吗?添加该属性似乎没有任何作用。我怀疑如果它确实隐藏了
HasBeenDealtWith
,我仍然会遇到同样的问题,
SourceTable
没有被分成三个单独的列(
SomeID
SomeProperty
SomethingElse
)。我的意思是将此属性添加到
hasbeendeltWith
属性中,以便将其标记为不是自动生成的列,但这只是一个猜测。我这样做了,但似乎被忽略了。将属性添加到
HasBeenDealtWith
后得到的视图与以前完全相同。我认为您需要有两个嵌套的ItemsControl来实现目标。一个为每个
TableWrapperViewModel
创建一个项,另一个为源表的每个属性创建一个项的“内部”ItemControl。这需要使用某种
DataTemplate
s。在我看来,您想要的东西不能用一个
DataGrid
完成。
[Display(AutoGenerateField=false)]
属性在这方面有什么好处吗?添加该属性似乎没有任何作用。我怀疑如果它确实隐藏了
HasBeenDealtWith
,我仍然会遇到同样的问题,
SourceTable
没有被分成三个单独的列(
SomeID
SomeProperty
SomethingElse
)。我的意思是将此属性添加到
hasbeendeltWith
属性中,以便将其标记为不是自动生成的列,但这只是一个猜测。我这样做了,但似乎被忽略了。将属性添加到
HasBeenDealtWith
后得到的视图与以前完全相同。我认为您需要有两个嵌套的ItemsControl来实现目标。一个为每个
TableWrapperViewModel
创建一个项,另一个为源表的每个属性创建一个项的“内部”ItemControl。这需要使用某种
DataTemplate
s。在我看来,您想要的东西不能用一个
DataGrid
来完成。