ブーヤー!!!
ここでサンプルを見て、ここで他の投稿からいくつかの参照を掘り下げ、答えを見つけました... IValueConverter ...バインディングの時点で値を変換するWPFで使用できるインターフェース。最初は組み立てに少し戸惑いますが、それほど難しくはありません。
最初の手順は、IValueConverter インターフェイスを実装する単純なルックアップ クラスまたはコンバーター クラスを作成することです。私の解決策として、私はこれを行いました:
Namespace TCRConverters
Public Class SetIdToNameConverter
Implements IValueConverter
Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
Dim taCardSet As New TCRTableAdapters.CardSetTableAdapter
Return taCardSet.GetDataById(DirectCast(value, Integer)).Item(0).Name
End Function
Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
Return Nothing
End Function
End Class
End Namespace
注: ConvertBack メソッドは使用していませんが、インターフェイスで必要です。
そこから、XAML ヘッダー セクションに名前空間への参照を追加する必要があります。
<Window x:Class="Main" Loaded="Main_Loaded"
// Standard references here...
xmlns:c="clr-namespace:TCR_Editor.TCRConverters"
Title="TCR Editor" Height="728" Width="1135" Name="Main">
次に、Windows.Resources セクションでコンバーターを参照できます。私の場合は、データを格納する CollectionViewSource への静的参照を作成しました。
<Window.Resources>
<CollectionViewSource Source="{Binding Source={x:Static Application.Current}, Path=CardDetails}" x:Key="CardDetails">
</CollectionViewSource>
<c:SetIdToNameConverter x:Key="SetConverter"/>
</Window.Resources>
最後に、最初の問題の一部であった ListView に、コンバーター参照を追加します。
<ListView Canvas.Left="402" Canvas.Top="480" Height="78" ItemsSource="{Binding}" Name="lsvViewEditCardPrint" Width="419">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Path=IdCst, Converter={StaticResource SetConverter}}">Set</GridViewColumn>
// Other Columns here...
</GridView>
</ListView.View>
</ListView>
したがって、カード ID を持つイベントをトリガーすると、CollectionViewSource の設定をリセットするだけで済みます...
DirectCast(Me.FindResource("CardDetails"), CollectionViewSource).Source = taCardDetails.GetDataById(CardId)
...そして、WPF のすべてのバインディング要素が残りを行います!
良い点は、他のコンバーターを簡単に作成し、それらをアプリケーションの別の場所にあるさまざまな DataTemplates または列に追加できることです。すべてのデータを WPF アプリ自体に取り込めば、データベースにアクセスせずに変換を実行できます。 .