私はまだデータバインディングを初めて使用しており、この質問を何時間も読んで調査してきました.誰かが少なくとも私を正しい方向に向けることができることを願っています.
私が持っているのは、次のようなオブジェクトが取り込まれた 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 をバインドしようとしなくても)。どんな助けや指示も大歓迎です!