何か基本的なことが欠けているかどうかを確認するために周りを見回そうとしましたが、何が間違っているのか理解できないようです。
データセットからの写真のコレクションビューにアイテムソースをバインドしたいリストボックスがあります。問題は、画像が存在するディレクトリを MasterView CollectionView から取得し、個々のファイル名を DetailView CollectionView から取得する必要があることです。そこで、リソースを次のように定義しました。
<CollectionViewSource x:Key="MasterView" />
<CollectionViewSource Source="{Binding Source={StaticResource MasterView}, Path='tblGallery_tblPictures'}" x:Key="DetailView" />
これは問題なく動作するようです。データ セットをナビゲートして、マスター データと詳細データを確認できます。
完全なイメージ パスを取得するには、この 2 つをまとめるためのマルチバインディングが必要であることがわかり、1 つを作成することに成功しました。
<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 からのデータと 2 番目の値の汎用オブジェクトのみが渡されます。
動作するかどうかを確認するために、マルチバインディングに詳細なソース情報を追加しました。
<MultiBinding Converter="{StaticResource imagePathConverter}">
<Binding Source="{StaticResource MasterView}" Path="galleryLocation" />
<Binding Source="{StaticResource DetailView}" Path="pictureFileName" />
</MultiBinding>
少なくとも、リストボックスに 5 つの画像があることがわかりましたが、それらはすべて同じ画像でした。DetailView CollectionView へのマルチバインド アクセスでは、最初のアイテムのみが表示されたようです。
「pictureFileName」を現在の ItemsSource アイテムにリンクして、正しい画像を表示できるようにする方法はありますか?
ありがとう!
ジョシュ