首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将图像绑定到ListView中的VB.net (Windows )

将图像绑定到ListView中的VB.net (Windows )
EN

Stack Overflow用户
提问于 2013-01-19 17:57:35
回答 1查看 1.6K关注 0票数 0

在VB.net中将图像绑定到VB.net中有问题。我正在构建一个应用程序,它将调整图像的大小、转换和压缩图像,但我希望将选定的图像显示在ListView中,与图像名称一起显示。

这是ListView的XAML代码:

代码语言:javascript
复制
<ListView x:Name="ListView" ItemsSource="{Binding Image}" HorizontalAlignment="Left" Height="481" Margin="10,275,0,0" VerticalAlignment="Top" Width="1069" BorderBrush="#FF003859" Foreground="White" Background="#42FFFFFF" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="6,0,6,6" FontSize="16" SelectionMode="Multiple">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="vertical">
                        <Grid Height="160" Margin="6">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <Border Width="160" Height="160">
                                <Image HorizontalAlignment="Center" VerticalAlignment="Center" Source="{Binding ImageID}" Stretch="Uniform" />
                            </Border>
                            <StackPanel Grid.Column="1" VerticalAlignment="Center" Margin="10,0,0,0">
                                <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap"/>
                            </StackPanel>
                        </Grid>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

下面是Image类的代码:

代码语言:javascript
复制
Imports System.Collections.ObjectModel

Public Class Image</code>

    Private _Title As String
    Private _ImageID As BitmapImage

    Public ReadOnly Property Title() As String
        Get
            Return _Title
        End Get
    End Property
    Public ReadOnly Property Image() As BitmapImage
        Get
            Return _ImageID
        End Get
    End Property

    Public Sub New(ByVal Title As String, ByVal ImageID As BitmapImage)
        _Title = Title
        _ImageID = ImageID
    End Sub

End Class

下面是在ListView中添加图像的按钮的代码:

代码语言:javascript
复制
Private Async Sub AddImage_Click(sender As Object, e As RoutedEventArgs) Handles AddImage.Click

        Dim picker As New FileOpenPicker()

        picker.SuggestedStartLocation = PickerLocationId.Desktop
        picker.ViewMode = PickerViewMode.Thumbnail
        picker.FileTypeFilter.Add(".jpg")
        picker.FileTypeFilter.Add(".jpeg")
        picker.FileTypeFilter.Add(".bmp")
        picker.FileTypeFilter.Add(".gif")
        picker.FileTypeFilter.Add(".png")
        picker.FileTypeFilter.Add(".tiff")
        picker.FileTypeFilter.Add(".tga")

        Dim files As IReadOnlyList(Of StorageFile) = Await picker.PickMultipleFilesAsync

        Dim imagearray(10000000) As BitmapImage
        Dim i = 0
        If files.Count > 0 Then
            For Each file In files
                imagearray(i) = New BitmapImage(New Uri(file.Path))
                i += 1
            Next
            Dim j = 0
            For Each file In files
                ListView.Items.Add(New Image(file.Name, imagearray(j)))
                j += 1
            Next
        End If

    End Sub

请帮我解决这个问题。

编辑:

ListView XAML代码:

代码语言:javascript
复制
<ListView x:Name="ListView" HorizontalAlignment="Left" Height="481" Margin="10,275,0,0" VerticalAlignment="Top" Width="1069" BorderBrush="#FF003859" Foreground="White" Background="#42FFFFFF" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="6,0,6,6" FontSize="16" SelectionMode="Multiple">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="vertical">
                        <Grid Height="160" Margin="6">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <Border Width="160" Height="160">
                                <Image HorizontalAlignment="Center" VerticalAlignment="Center" Source="{Binding ImageID}" Stretch="Uniform" />
                            </Border>
                            <StackPanel Grid.Column="1" VerticalAlignment="Center" Margin="10,0,0,0">
                                <TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap"/>
                            </StackPanel>
                        </Grid>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

图像类:

代码语言:javascript
复制
Imports System.Collections.ObjectModel

Public Class Image

    Private _Title As String
    Private _Image As BitmapImage

    Public ReadOnly Property Title() As String
        Get
            Return _Title
        End Get
    End Property
    Public ReadOnly Property ImageID() As BitmapImage
        Get
            Return _Image
        End Get
    End Property

    Public Sub New(ByVal Title As String, ByVal ImageID As BitmapImage)
        _Title = Title
        _Image = ImageID
    End Sub

End Class

按钮:

代码语言:javascript
复制
Dim ImageCollection As New Collection(Of Image)

     Private Async Sub AddImage_Click(sender As Object, e As RoutedEventArgs) Handles AddImage.Click

            Dim picker As New FileOpenPicker()

            picker.SuggestedStartLocation = PickerLocationId.Desktop
            picker.ViewMode = PickerViewMode.Thumbnail
            picker.FileTypeFilter.Add(".jpg")
            picker.FileTypeFilter.Add(".jpeg")
            picker.FileTypeFilter.Add(".bmp")
            picker.FileTypeFilter.Add(".gif")
            picker.FileTypeFilter.Add(".png")
            picker.FileTypeFilter.Add(".tiff")
            picker.FileTypeFilter.Add(".tga")

            Dim files As IReadOnlyList(Of StorageFile) = Await picker.PickMultipleFilesAsync

            Dim imagearray(10000000) As BitmapImage
            Dim i = 0
            If files.Count > 0 Then
                For Each file In files
                    imagearray(i) = New BitmapImage(New Uri(file.Path))
                    i += 1
                Next
                Dim j = 0
                For Each file In files
                    ImageCollection.Add(New Image(file.Name, imagearray(j)))
                    j += 1
                Next
                For Each file In files
                    ListView.ItemsSource = ImageCollection
                Next

            End If

        End Sub

这是我现在的代码,但图像仍未显示。怎么啦?

这里是新编辑:

ListView XAML代码:

代码语言:javascript
复制
<ListView x:Name="ListView" DataContext="{Binding Image}" HorizontalAlignment="Left" Height="481" Margin="10,275,0,0" VerticalAlignment="Top" Width="1069" BorderBrush="#FF003859" Foreground="White" Background="#42FFFFFF" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" BorderThickness="6,0,6,6" FontSize="16" SelectionMode="Multiple">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="vertical">
                        <Grid Height="160" Margin="6">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <Border Width="160" Height="160">
                                <Image HorizontalAlignment="Center" VerticalAlignment="Center" Source="{Binding ImageProperty}" Stretch="Uniform" />
                            </Border>
                            <StackPanel Grid.Column="1" VerticalAlignment="Center" Margin="10,0,0,0">
                                <TextBlock Text="{Binding TitleProperty}" Style="{StaticResource TitleTextStyle}" TextWrapping="NoWrap"/>
                            </StackPanel>
                        </Grid>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

图像类:

代码语言:javascript
复制
Imports System.Collections.ObjectModel

Public Class Image

    Implements INotifyPropertyChanged

    Private ImageX As BitmapImage
    Private TitleX As String

    Public ReadOnly Property ImageProperty() As BitmapImage
        Get
            Return ImageX
        End Get
    End Property

    Public ReadOnly Property TitleProperty() As String
        Get
            Return TitleX
        End Get
    End Property

    Public Sub New(ByVal ImageTitle As String, ByVal ImageID As BitmapImage)
        TitleX = ImageTitle
        ImageX = ImageID
    End Sub

    Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged

    Public Sub NotifyPropertyChanged(ByVal propertyName As String)
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName))
    End Sub

End Class

和带有ImageCollection类的按钮:

代码语言:javascript
复制
 Dim ImageCollection As New ImageCollectionClass

    Private Async Sub AddImage_Click(sender As Object, e As RoutedEventArgs) Handles AddImage.Click

        Dim picker As New FileOpenPicker()

        picker.SuggestedStartLocation = PickerLocationId.Desktop
        picker.ViewMode = PickerViewMode.Thumbnail
        picker.FileTypeFilter.Add(".jpg")
        picker.FileTypeFilter.Add(".jpeg")
        picker.FileTypeFilter.Add(".bmp")
        picker.FileTypeFilter.Add(".gif")
        picker.FileTypeFilter.Add(".png")
        picker.FileTypeFilter.Add(".tiff")
        picker.FileTypeFilter.Add(".tga")

        Dim files As IReadOnlyList(Of StorageFile) = Await picker.PickMultipleFilesAsync

        Dim imagearray(10000000) As BitmapImage
        Dim i = 0
        If files.Count > 0 Then
            For Each file In files
                imagearray(i) = New BitmapImage(New Uri(file.Path))
                i += 1
            Next
            Dim j = 0
            For Each file In files
                ImageCollection.AddImage(file.Name, imagearray(j))
                j += 1
            Next
            For Each file In files
                ListView.ItemsSource = ImageCollection
            Next

        End If

    End Sub

Public Class ImageCollectionClass

    Public ImageCollectionClass As New ObservableCollection(Of Image)

    Public Sub AddImage(ByVal ImageTitleInClass As String, ByVal ImageIDInClass As BitmapImage)
        ImageCollectionClass.Add(New Image(ImageTitleInClass, ImageIDInClass))
    End Sub

End Class

,但它不起作用。请告诉我,现在怎么了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-24 08:02:57

您的原始循环相当复杂(认为这不是程序的直接原因)。所有这些代码:

代码语言:javascript
复制
    Dim imagearray(10000000) As BitmapImage
    Dim i = 0
    If files.Count > 0 Then
        For Each file In files
            imagearray(i) = New BitmapImage(New Uri(file.Path))
            i += 1
        Next
        Dim j = 0
        For Each file In files
            ImageCollection.AddImage(file.Name, imagearray(j))
            j += 1
        Next
        For Each file In files
            ListView.ItemsSource = ImageCollection
        Next
    End If

可折叠为:

代码语言:javascript
复制
    For Each file In files
        ImageCollection.AddImage(file.Name, New BitmapImage(New Uri(file.Path)))
    Next
    ListView.ItemsSource = ImageCollection.ImageCollectionClass

注意,您需要ImageCollectionClass作为您的ItemsSource

在那里,您可以合并XAML图像样本场景2中的代码,并修改以通过SetSourceAsync获取映像。

代码语言:javascript
复制
    Dim fileStream As IRandomAccessStream
    For Each file In files
        fileStream = Await file.OpenAsync(Windows.Storage.FileAccessMode.Read)

        Dim bitmapImage As New BitmapImage()
        Await bitmapImage.SetSourceAsync(fileStream)

        ImageCollection.AddImage(file.Name, bitmapImage)
    Next
    ListView.ItemsSource = ImageCollection.ImageCollectionClass
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14417136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档