我试图环顾四周,看看我是否遗漏了一些基本的东西,但我似乎无法理解我做错了什么。
我有一个列表框,我想将 itemssource 绑定到数据集中的照片集合视图。问题是,我需要从 MasterView CollectionView 中获取图像所在的目录,以及从 DetailView CollectionView 中获取各个文件名。所以我定义了资源:
<CollectionViewSource x:Key="MasterView" />
<CollectionViewSource Source="{Binding Source={StaticResource MasterView}, Path='tblGallery_tblPictures'}" x:Key="DetailView" />
这似乎没有问题,我可以浏览数据集并查看主数据和详细数据。
为了获得完整的图像路径,我发现我需要一个多重绑定来将两者放在一起,并成功创建了一个:
<ListBox HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ItemsSource="{Binding Source={StaticResource DetailView}}">
<ListBox.ItemTemplate>
<DataTemplate>
<Image Width="120"
Stretch="Uniform"
Margin="8,8,8,8">
<Image.Source>
<BitmapImage DecodePixelWidth="120">
<BitmapImage.UriSource>
<MultiBinding Converter="{StaticResource imagePathConverter}">
<Binding Source="{StaticResource MasterView}" Path="galleryLocation" />
<Binding Path="pictureFileName" />
</MultiBinding>
</BitmapImage.UriSource>
</BitmapImage>
</Image.Source>
</Image>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" HorizontalAlignment="Stretch" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
Public Function Convert(ByVal values() As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IMultiValueConverter.Convert
If values.Count() <> 2 Then
Throw New InvalidOperationException("Correct Values Not Provided")
End If
Dim directory As String
Dim fileName As String
Dim imgUri As Uri = Nothing
If TypeOf values(0) Is String And TypeOf values(1) Is String Then
directory = CType(values(0), String)
fileName = CType(values(1), String)
If directory <> "" And fileName <> "" Then
If directory.LastIndexOf("/") = directory.Length - 1 Then
imgUri = New Uri(directory & fileName, UriKind.Absolute)
Else
imgUri = New Uri(directory & "/" & fileName, UriKind.Absolute)
End If
End If
End If
Return (imgUri)
End Function
我对后续代码的假设是,DataTemplate 中的 MultiBinding 可以访问列表框中定义为 ItemsSource 的 BindingSource。但是,当我查看 MultiValueConverter 代码时,它只传递来自 MasterView 的数据和第二个值的通用对象。
为了看看我是否可以让它工作,我在多重绑定中添加了详细的源信息:
<MultiBinding Converter="{StaticResource imagePathConverter}">
<Binding Source="{StaticResource MasterView}" Path="galleryLocation" />
<Binding Source="{StaticResource DetailView}" Path="pictureFileName" />
</MultiBinding>
这至少让我看到列表框中有 5 张图片,但它们都是同一张图片。似乎对 DetailView CollectionView 的多重绑定访问只显示了第一项。
有没有办法将“pictureFileName”链接到当前的 ItemsSource 项,以便显示正确的图片?
谢谢!
乔什