Как сделать так, чтобы XAML GridView отображал одно из нескольких изображений, в зависимости от DisplayMemberBinding? - PullRequest
1 голос
/ 28 сентября 2010

У меня есть Enum с именем "DoYouKnow", содержащий Yes, No и Unknown.

У меня есть столбец в GridView, который в настоящее время отображает "Да", "Нет"или «Неизвестно» в каждой строке, основываясь на значении DoYouKnow, к которому я его прикрепил, используя DisplayMemberBinding.

Вместо отображения я хотел бы, чтобы в этом столбце отображалась галочка, крестик или знак вопроса.

До сих пор самым близким, что я получил к этой работе, было рисование некоторых картинок и оплакивание того факта, что если бы мне не пришлось использовать WPF, я мог бы делать это в коде, не беспокоя всех вас.хорошие люди.

Есть идеи, что мне делать дальше?

РЕДАКТИРОВАТЬ: Основываясь на советах Рида, я дошел до этой стадии с моим XAML (большая часть деталей была вырвана, извиненияесли что-то очевидное отсутствует, не стесняйтесь спрашивать, потому что я знаю, что чего-то важного не хватает):

<UserControl.Resources>
  <l:KnownImageConverter x:Key="imageConverter"/>
</UserControl.Resources>
<Grid>
  <ListView>
    <ListView.View>
      <GridView>
        <GridViewColumn Header="Known State" DisplayMemberBinding="{Binding Path=Known, Converter={StaticResource imageConverter}}" />
      </GridView>
    </ListView.View>
  </ListView>
</Grid>

И это iValueConverter, который я собрал вместе:

<ValueConversion(GetType(Known), GetType(Image))>
Public Class KnownImageConverter
    Implements IValueConverter

    Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
        Select Case CType(value, Known)
            Case Known.Yes
                Return My.Resources.Yes
            Case Known.No
                Return My.Resources.No
            Case Known.Unknown
                Return My.Resources.Unknown
        End Select
        Return New Image
    End Function

    Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
        If value Is My.Resources.Yes Then
            Return Known.Yes
        ElseIf value Is My.Resources.No Then
            Return Known.No
        ElseIf value Is My.Resources.Unknown Then
            Return Known.Unknown
        End If
        Return Known.Unknown
    End Function
End Class

Как я уже сказал в комментариях ниже, изображения, которые я используюg отображаются в ListView как «System.Drawing.Bitmap» вместо моих симпатичных маленьких картинок.

1 Ответ

1 голос
/ 28 сентября 2010

Вы можете сделать IValueConverter , чтобы преобразовать ваше перечисление в соответствующее изображение. Тогда вы можете просто привязать источник изображения с помощью преобразователя значений непосредственно к вашему значению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...