WPF DataGrid单元前景绑定不起作用

我试图根据其值更改列的前景颜色。当我尝试静态设置Foreground时,它可以工作,但是当我使用转换器进行绑定时,则什么也没有发生。

这是一个小例子

<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,UpdateSourceTrigger=PropertyChanged}" />
        <DataGridTextColumn IsReadOnly="True" Width="*" Header="Maximum" Binding="{Binding Maximum,UpdateSourceTrigger=PropertyChanged}" />
        <DataGridTextColumn IsReadOnly="True" Width="100" Header="Pass-Fail" Binding="{Binding Pass_Fail,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" />,我的单元格将更改其文本颜色。我可能会缺少什么吗?

具有静态颜色:

WPF DataGrid单元前景绑定不起作用

具有动态颜色:

WPF DataGrid单元前景绑定不起作用

iCMS 回答:WPF DataGrid单元前景绑定不起作用

即使我不是这样做的,我也一直习惯使事情工作,如果您需要快速工作,我可以在完美解决方案来临之际为您提供替代方案。 为了使事情起作用,我只使用了布尔值和触发器。

         <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>

因此,在这个示例中(我没有做太多修改),我根据传递值(只是一个布尔值)更改了背景颜色。

,

enter image description here>

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,UpdateSourceTrigger=PropertyChanged}" />
    <DataGridTextColumn IsReadOnly="True" Width="100" Header="Pass-Fail" Binding="{Binding Pass_Fail,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的数据网格第一行删除模式=双向

 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;

        }
    }
本文链接:https://www.f2er.com/1720340.html

大家都在问