我在 VB.net 中将图像绑定到 ListView 时遇到问题。我正在构建一个将调整图像大小、转换和压缩图像的应用程序,但我希望所选图像与图像名称一起显示在 ListView 中。
这是 ListView 的 XAML 代码:
<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 类的代码:
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 中添加图像的按钮的代码:
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
这个你能帮我吗。
编辑:
列表视图 XAML 代码:
<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>
图像类:
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
按钮:
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
这是我现在拥有的代码,但图像仍未显示。怎么了?
这是新的编辑:
列表视图 XAML 代码:
<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>
图像类:
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 类的按钮:
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
但它不起作用。请告诉我现在怎么了!