Как изменить изображение строки сетки данных WPF в зависимости от значения привязки - PullRequest
3 голосов
/ 28 марта 2012

Я новичок в 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>

Теперь мне нужно добавить заголовок с заголовком «Статус». и содержание как изображение. Я обязываю Столбец «IsRead» для данных в этом столбце, так что если значение IsRead равно False, мне нужно показать изображение unread.png, а если значение IsRead равно True, мне нужно показать изображение

Как мне это сделать?

1 Ответ

11 голосов
/ 28 марта 2012

Вы можете создать свойство StatusImage в классе, который содержит ваши свойства привязки:

public string StatusImage {
    get 
    {
        if (IsRead)
            return "read.png";
        return "unread.png";
    }
}

А затем привязать его к изображению, например:

<Image Source="{Binding StatusImage}"></Image>

Или как в вашем случае, что у вас нет класса. Вы можете выбрать один из источников данных:

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Image Name="IsReadImage" Source="read.png"/>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding IsRead}" Value="False">
                    <Setter TargetName="IsReadImage" Property="Source" Value="unread.png"/>
                </DataTrigger>             
            </DataTemplate.Triggers>         
        </DataTemplate>     
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn>

Или вы можете использовать преобразователь значения:

Класс:

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

Должно все работать.

...