C# 如何根据绑定值更改WPF datagrid行的映像

C# 如何根据绑定值更改WPF datagrid行的映像,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,我是WPF的初学者 我有一个数据网格,用于显示具有列定义的消息,如下所示。数据网格绑定到数据表 <my:DataGridTextColumn Binding="{Binding Module}" Header="Module" Width="75" IsReadOnly="True"></my:DataGridTextColumn> <my:DataGridTextColumn Binding="{Binding Record ID}" Header="R

我是WPF的初学者

我有一个数据网格,用于显示具有列定义的消息,如下所示。数据网格绑定到数据表

<my:DataGridTextColumn Binding="{Binding Module}" Header="Module" 
    Width="75" IsReadOnly="True"></my:DataGridTextColumn>
<my:DataGridTextColumn Binding="{Binding Record ID}" Header="RecordID" 
    Width="75" IsReadOnly="True"></my:DataGridTextColumn>
<my:DataGridTextColumn Binding="{Binding ItemName}" 
    Header="Item/Platform/Country Name" Width="175" IsReadOnly="True">  
    </my:DataGridTextColumn>
<my:DataGridTextColumn Binding="{Binding DateReceived}" 
    Header="DateReceived" Width="150" IsReadOnly="True">
    </my:DataGridTextColumn>
<my:DataGridTextColumn Binding="{Binding Comments}" Header="Comments" 
    Width="300" IsReadOnly="True"></my:DataGridTextColumn>

现在我需要添加一个标题为“Status”的coulmn。而内容就是图像。我有约束力 将datatable的“IsRead”列添加到此列,这样,如果IsRead值为False,我需要显示image unread.png,如果IsRead值为True,我需要显示image read.png


我该怎么做

您可以在保存绑定属性的类中创建StatusImage属性:

public string StatusImage {
    get 
    {
        if (IsRead)
            return "read.png";
        return "unread.png";
    }
}
然后将其绑定到图像,例如:

<Image Source="{Binding StatusImage}"></Image>
窗口资源:

<local:IsReadImageConverter ReadImage="Read.png" UnreadImage="Unread.png" x:Key="BoolImageConverter"/>

应该都能用。

IsRead在该类中未定义,对吗?IsRead是一个datatable columnWell,其中指定了ItemName、Module、DateReceived等?它来自一个类,对吗?我在上面的响应中添加了一个DataTrigger解决方案和一个ValueConverter解决方案。当我尝试使用ValueConverter时,我得到一个错误,说ReadImage是一个图像,我无法为它分配字符串。
public class IsReadImageConverter : IValueConverter  
{
    public Image ReadImage { get; set; }
    public Image UnreadImage { get; set; }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (!(value is bool))
        {
            return null;
        }
        bool b = (bool)value;
        if (b)
        {
            return this.ReadImage
        }
        else
        {
            return this.UnreadImage
        }
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
<local:IsReadImageConverter ReadImage="Read.png" UnreadImage="Unread.png" x:Key="BoolImageConverter"/>
ImageSource={Binding Path=IsRead,Converter={StaticResource BoolImageConverter}}"