我是一名新手,对于数据绑定还有很多不了解的地方。我已经花费数小时阅读和研究这个问题,希望有人能够至少指点我正确的方向。
我的问题是,我有一个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绑定到Text(即使不尝试绑定BackGroundColor)。任何帮助或指导将不胜感激!
set
方法用于设置背景颜色,它是一个无限循环,但很可能不是你目前面临的问题。 - user7116BackgroundColor
属性是Brush
类型并返回Brushes.Green
或Brushes.White
,是否可以正常工作。 - vlad