【问题标题】:WPF: Image in ListView is not be shownWPF:ListView 中的图像未显示
【发布时间】:2026-01-05 21:00:01
【问题描述】:

我有一个 ListView,每行应该包含一个图像和文本。文本的绑定工作正常,但图像不显示。

我的 XAML 标记:

<ListView Name="lvUpgrade">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="20px">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <Image Source="{Binding Path=Icon}" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Width="75px" DisplayMemberBinding="{Binding Path=Time, StringFormat={}{0:HH:mm:ss}}" />
            <GridViewColumn Width="300px" Header="Nachricht" DisplayMemberBinding="{Binding Path=Message}" />
        </GridView>
    </ListView.View>
</ListView>

我的代码在后面:

Public Class Upgrade

    Public Sub AddMessage(ByVal message As Message)
        Me.lvUpgrade.Items.Add(message)
    End Sub

    Public Class Message

        Public Enum MessageType

            Normal
            Information
            Warning
            [Error]
        End Enum

        Public Sub New(ByVal type As MessageType, ByVal message As String)
            _Type = type
            _Message = message
        End Sub

        Private _Type As MessageType = MessageType.Normal
        Public ReadOnly Property Type As MessageType
            Get
                Return _Type
            End Get
        End Property

        Private _Message As String = String.Empty
        Public ReadOnly Property Message As String
            Get
                Return _Message
            End Get
        End Property

        Private _Time As DateTime = Now
        Public ReadOnly Property Time As DateTime
            Get
                Return _Time
            End Get
        End Property

        Public ReadOnly Property Icon As System.Drawing.Image
            Get
                Select Case Me.Type
                    Case MessageType.Information
                        Return My.Resources.Information16
                    Case MessageType.Warning
                        Return My.Resources.Alert16
                    Case MessageType.Error
                        Return My.Resources.Error16
                    Case Else
                End Select

                Return Nothing
            End Get
        End Property
    End Class
End Class

为了绑定图像,我使用了一个从本地资源返回图像的属性。我使用与文本相同的方式将图像绑定到控件。这是尝试错误还是为什么不起作用?

感谢您的回复。

【问题讨论】:

    标签: wpf image listview binding


    【解决方案1】:

    您必须将Image 转换为BitmapImage

    为此,您可以在单独的模块中定义以下扩展。 这提供了在代码中的每个图像上使用函数的机会:

    Module Extensions
    
      <Extension()>
      Public Function ToBitmapImage(ByVal lBitmap As Bitmap) As BitmapImage
        Dim lMemoryStream As New MemoryStream()
        Dim lBitmapImage As New BitmapImage()
    
        lBitmap.Save(lMemoryStream, ImageFormat.Png)
        lBitmapImage.BeginInit()
        lBitmapImage.StreamSource = New MemoryStream(lMemoryStream.ToArray())
        lBitmapImage.EndInit()
        Return lBitmapImage
      End Function
    
    End Module
    

    之后,您必须像这样编辑您的属性:

    Public ReadOnly Property Icon As BitmapImage
      Get
        Select Case Me.Type
          Case MessageType.Information
            Return My.Resources.Information16.ToBitmapImage
          Case MessageType.Warning
            Return My.Resources.Alert16.ToBitmapImage
          Case MessageType.Error
            Return My.Resources.Error16.ToBitmapImage
          Case Else
        End Select
    
        Return Nothing
      End Get
    End Property
    

    【讨论】:

    • 那行得通。非常感谢。提示:属性的返回类型也必须更改为 BitmapImage。
    • 哦,刚刚忘记更改了。已编辑,感谢您的信息。