我还是数据绑定的新手,并且已经阅读和研究了这个问题几个小时,我希望有人至少可以为我指出正确的方向。
我拥有的是一个填充有以下对象的 DataTable:
public class SimpleObject
{
public string DisplayValue { get; set; }
public bool Match { get; set; }
public string BackGroundColor
{
get { if (Match) return "Green"; else return "White"; }
set { //do nothing }
}
}
我已经为数据表的列设置了标题,如下所示:
DataTable MyDataTable = new DataTable()
List headers = new List<string>() {"Header1", "Header2", "Header3", "Header4"}
foreach (string key in headers)
{
MyDataTable.Columns.Add(new DataColumn(key, typeof(SimpleObject)));
}
并通过添加类似于以下内容的行来填充我的 DataTable 行:
SimpleObject[] rowList = new SimpleObject[4]
DataRow dataRow = MyDataTable.NewRow();
for(int i = 0; i < 4; i++)
{
//Not really how I determine values, but this will do for a basic example
rowList[i].DisplayValue = i.ToString();
rowList[i].Match = i % 2 == 0;
}
dataRow.ItemArray = rowList;
MyDataTable.Rows.Add(dataRow);
SimpleDataGrid.DataContext = MyDataTable;
现在,我想做的是将 MyDataTable 绑定到 DataGrid ,这样:
- SimpleObject.DisplayValue 显示在单元格的值中
- 单元格的背景颜色由 SimpleObject.BackGroundColor 确定
如果有人可以就如何做到这一点给我建议,我将不胜感激!到目前为止,我已经尝试做类似的事情:
<DataGrid Name="SimpleDataGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Header1" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Header1.DisplayValue}"
BackGround="{Binding Path=Header1.BackGroundColor}"
/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
但没有运气。我什至无法让 DisplayValue 绑定到文本(即使没有尝试绑定 BackGroundColor)。任何帮助或方向将不胜感激!