【发布时间】:2023-01-13 02:45:44
【问题描述】:
我正在学习 WPF。我正在尝试编写一个应用程序,该应用程序将根据其他方法计算的数据显示内置代码的表格。这似乎工作正常。 我的 xaml 代码是:
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<DataGrid Height="308" Margin="12,21,0,0" Name="mydataGrid" Width="722"/>
</ScrollViewer>
后面的代码创建了一个 DataTable 并添加了我需要的列:
dt = new DataTable("drx");
DataColumn sfn = new DataColumn("SFN", typeof(int));
DataColumn sbf0 = new DataColumn("subframe0", typeof(string));
DataColumn sbf1 = new DataColumn("subframe1", typeof(string));
DataColumn sbf2 = new DataColumn("subframe2", typeof(string));
DataColumn sbf3 = new DataColumn("subframe3", typeof(string));
DataColumn sbf4 = new DataColumn("subframe4", typeof(string));
DataColumn sbf5 = new DataColumn("subframe5", typeof(string));
DataColumn sbf6 = new DataColumn("subframe6", typeof(string));
DataColumn sbf7 = new DataColumn("subframe7", typeof(string));
DataColumn sbf8 = new DataColumn("subframe8", typeof(string));
DataColumn sbf9 = new DataColumn("subframe9", typeof(string));
dt.Columns.Add(sfn);
dt.Columns.Add(sbf0);
dt.Columns.Add(sbf1);
dt.Columns.Add(sbf2);
dt.Columns.Add(sbf3);
dt.Columns.Add(sbf4);
dt.Columns.Add(sbf5);
dt.Columns.Add(sbf6);
dt.Columns.Add(sbf7);
dt.Columns.Add(sbf8);
dt.Columns.Add(sbf9);
稍后,当计算数据时,我会显示它:
foreach (var item in data.dataGrid)
{
DataRow dr = dt.NewRow();
dr[0] = item.sfn;
dr[1] = item.subframes[0] ? "ON" : "";
dr[2] = item.subframes[1] ? "ON" : "";
dr[3] = item.subframes[2] ? "ON" : "";
dr[4] = item.subframes[3] ? "ON" : "";
dr[5] = item.subframes[4] ? "ON" : "";
dr[6] = item.subframes[5] ? "ON" : "";
dr[7] = item.subframes[6] ? "ON" : "";
dr[8] = item.subframes[7] ? "ON" : "";
dr[9] = item.subframes[8] ? "ON" : "";
dr[10] = item.subframes[9] ? "ON" : "";
dt.Rows.Add(dr);
}
mydataGrid.ItemsSource = dt.DefaultView;
mydataGrid.Items.Refresh();
这产生了预期的结果:
我现在想根据单元格内容更改单元格颜色,基本上是突出显示那些内容设置为“ON”的单元格
我一直在做一些阅读,看起来最好的方法是使用绑定。我尝试了在网上阅读的不同选项。以下内容对我来说没问题,它不会崩溃或产生任何异常,但不会添加任何背景颜色:
<DataGrid x:Name="mydataGrid">
<DataGridTextColumn Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<Trigger Property="Text" Value="ON">
<Setter Property="Background" Value="LightGreen"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid
有小费吗?
非常感谢
【问题讨论】:
-
为什么要检查
<Trigger Property="Text" Value="John">中的值"John"? -
我的错误,它被设置为先前测试的值。我纠正了它。谢谢!
标签: c# wpf data-binding datagrid