如何根据DisplayMemberBinding使XAML GridView显示多个图像中的一个?

时间:2010-09-28 14:51:30

标签: .net wpf xaml

我有一个名为“DoYouKnow”的枚举,其中包含YesNoUnknown

我在GridView中有一个列,根据我使用DisplayMemberBinding附加的DoYouKnow值,每行显示“是”,“否”或“未知”。

而不是显示我希望此列显示勾号,十字或问号。

到目前为止,我得到的最接近的工作是绘制一些图片,并哀叹如果我不必使用WPF,我可以在代码中执行此操作,而不必打扰所有好人。< / p>

知道接下来应该做什么吗?

编辑:根据里德的建议,我已经使用我的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

正如我在下面的评论中所说,我正在使用的图像都在ListView中显示为“System.Drawing.Bitmap”而不是我漂亮的小图片。

1 个答案:

答案 0 :(得分:1)

您可以制作IValueConverter将您的枚举转换为适当的图片。然后,您可以将图像源与值转换器直接绑定到您的值。