C# 使用ItemsSource对象中的属性作为要显示的属性
我想将ViewModels列表绑定到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; } //
数据网格
,然后使用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
来完成。