首页 > 解决方案 > WPF XAML 从函数加载图像

问题描述

我有 WPF 表单,我在其中从 childdataview 创建了一个列表视图。列表视图以及其他控件将具有图像。

因此子数据视图中的数据行具有“图像名称”,该位置实际上位于单独的 zip 文件中。

我已经在winforms中很好地完成了图片的显示:

If img.newFileFlag = vbTrue Then
            photoDisp.Image = Image.FromFile(img.newFileLocation)
            photoDisp.SizeMode = Windows.Forms.PictureBoxSizeMode.StretchImage
        Else
            Dim bp_Name As String = loc
            Dim strm As FileStream = New FileStream(bp_Name, FileMode.Open)
            Dim archive As ZipArchive = New ZipArchive(strm, ZipArchiveMode.Update)
            Dim imageStrm As Stream
            For Each entry As ZipArchiveEntry In archive.Entries
                If entry.Name.Contains(img.xFileName) Then
                    imageStrm = entry.Open()
                    photoDisp.Image = Image.FromStream(imageStrm)
                    photoDisp.SizeMode = Windows.Forms.PictureBoxSizeMode.StretchImage
                    Exit For
                End If
            Next
            strm.Close()
        End If

写错或介于两者之间,它有效。所以我承担了转换为 WPF 的任务并尝试做一些 MVVM。

所以如果我有一个列表视图:

<ListView Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Left" Width="300" Background="Red" ItemsSource="{Binding Path=ConnectedChildView}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <Image Source="/"/>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

正确加载该图像的正确方法是什么?

在我的 Viewmodel 中,我可以访问 zip 文件:

Public Property BPDProp As BredpackageData
        Get
            Return BPD
        End Get
        Set(value As BredpackageData)
            BPD = value
        End Set
    End Property

在 BredpackageData 类中:

Public Property BredPackageLocationProperty() As String
        Get
            Return BredPackageLocation
        End Get
        Set(ByVal value As String)
            BredPackageLocation = value
        End Set
    End Property

因此,我拥有使用与我的 winform 类似的功能所需的所有数据,我可能只是将其潜入后面的代码中并使其工作,但这感觉不对。

有没有更好、更正确的方法?

我想发布更多关于我尝试过的东西,但我还没有真正尝试过任何东西。我哪儿也去不了。

谢谢

标签: wpfvb.netmvvm

解决方案


推荐阅读