[英]WPF DataGrid cell foreground binding not working
我正在尝试根据其值更改列的前景色。 当我尝试静态设置前景时,它可以工作,但是当我使用转换器绑定时,什么也没有发生。
这是一个小例子
<DataGrid Foreground="White" FontSize="13" x:Name="datagrid_results" AutoGenerateColumns="False" ItemsSource="{Binding DataGridTable, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="3,5,1.6,35" MaxHeight="260">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Width="*" Header="Minimum" Binding="{Binding Minimum, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn IsReadOnly="True" Width="*" Header="Maximum" Binding="{Binding Maximum, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn IsReadOnly="True" Width="100" Header="Pass-Fail" Binding="{Binding Pass_Fail, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="{Binding Pass_Fail , Converter={StaticResource s2b}}" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
这是我的转换器:
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
Brush myBrush = Brushes.White;
string input = value as string;
switch (input)
{
case "Pass":
myBrush = Brushes.LightGreen;
break;
case "Fail":
myBrush = Brushes.Red;
break;
default:
myBrush = Brushes.White;
break;
}
return myBrush;
}
奇怪的是,在调试这个转换器时,刷子返回了正确的值。 只是单元格没有改变其文本颜色。 然而,当我使用它时: <Setter Property="Foreground" Value="Red" />
我的单元格改变了它们的文本颜色。 有什么我可能会遗漏的吗?
DataGrid Foreground="White" FontSize="13" x:Name="datagrid_results" AutoGenerateColumns="False" ItemsSource="{Binding ItemsClass, UpdateSourceTrigger=PropertyChanged}" Margin="3,5,1.6,35" MaxHeight="260"> <DataGrid.Columns> <DataGridTextColumn IsReadOnly="True" Width="*" Header="Minimum" Binding="{Binding Minimum, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> <DataGridTextColumn IsReadOnly="True" Width="*" Header="Maximum" Binding="{Binding Maximum, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> <DataGridTextColumn IsReadOnly="True" Width="100" Header="Pass-Fail" Binding="{Binding Pass_Fail, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> <DataGridTextColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="Foreground" Value="{Binding Pass_Fail, Converter={StaticResource s2b}}" /> </Style> </DataGridTextColumn.ElementStyle> </DataGridTextColumn> </DataGrid.Columns> </DataGrid>
从 xaml 的数据网格第一行中删除 Mode=TwoWay
public partial class MainWindow: Window { List<ItemsClass> items = new List<ItemsClass>(); public MainWindow() { InitializeComponent(); this.DataContext = this; items.Add(new ItemsClass() { Pass_Fail="Pass" }); items.Add(new ItemsClass() { Pass_Fail = "Fail" }); items.Add(new ItemsClass() { Pass_Fail = "Pass" }); items.Add(new ItemsClass() { Pass_Fail = "Fail" }); datagrid.ItemsSource = items; } }
我已经习惯了让事情正常进行,即使这不是我这样做的方式,如果你需要它快速工作,我可以为你提供一个替代方案,同时完美的解决方案即将到来。 为了使事情正常进行,我只使用了 boolean 和触发器。
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding pass}" Value="true">
<Setter Property="Background" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding pass}" Value="false">
<Setter Property="Background" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
所以在这个例子中(我没有修改太多),我根据传递值(它只是一个布尔值)改变了背景颜色。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.