在我的WPF应用程序中,我将数据绑定到DataGrid
。我们说我有一个班级
public MyRowData
{
public int Id { get; set; }
public int string Description { get; set; }
public CustomClass1 SomeData1 { get; set; }
public List<CustomClass2> SomeDataList2 { get; set; }
}
此类表示DataGrid
中的一行。我的DataGrid
列数可变,具体取决于SomeDataList2
列表的长度。
在我的ViewModel中,我目前拥有属性
public ObservableCollection<DataGridColumn> MyColumnCollection { get; set; }
public List<MyRowData> MyTable { get; set; }
在我的XAML文件中,我有
<DataGrid IsReadOnly="True"
ItemsSource="{Binding MyTable, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
viewmodel:DataGridColumnsBehavior.BindableColumns="{Binding MyColumnCollection}"
AutoGenerateColumns="False" />
其中viewmodel:DataGridColumnsBehavior.BindableColumns
是建议here的类。
MyColumnCollection
包含一些DataGridColumn
个对象,例如
new DataGridTextColumn()
{
Header = "Id",
Binding = new Binding("Id")
{
Converter = myConverter // some converter I defined earlier
},
CanUserSort = false,
CanUserReorder = false,
CellStyle = cellStyleDefault, // some style I defined earlier
ElementStyle = elementStyleRight, // some style I defined earlier
HeaderStyle = headerStyleRight // some style I defined earlier
};
当然,我还为我需要的其他每个列添加DataGridColumn
,即Description
,SomeData1
以及SomeDataList2
中的每个元素。
到目前为止这种方法完全正常。但我发现在我的ViewModel中设置样式(CellStyle
,ElementStyle
,HeaderStyle
)有点奇怪。我希望在我的视图中设置这些样式(在XAML
文件中)。
我找到了很多关于如何在XAML
文件中设置样式的示例,但是到目前为止我发现的所有内容都假设相同的样式应用于所有列。但是,在我的情况下,string
个对象,CustomClass1
个对象和CustomClass2
应使用不同的样式。
现在我的第一个问题是: XAML
是否有办法测试对象的类型,并根据类型应用不同的样式?
我使用的样式也使用绑定到某些属性的触发器。例如,我使用
DataTrigger myTrigger = new DataTrigger()
{
Binding = new Binding("SomeDataList2[" + index + "].SomePropteryOfCustomClass2"),
Value = true
};
并将此DataTrigger
应用于用于显示对象SomeDataList2[index]
的样式。因为我在绑定名称中使用索引,所以我不确定如何在XAML
中编写这样的绑定。
现在我的第二个问题是:有没有办法用XAML
中的索引编写绑定,以便SomeDataList2
中的每个对象(其中index
为此列表中的对象索引)可以在触发器中使用绑定到SomeDataList2[" + index + "].SomePropteryOfCustomClass2
吗?