嘘!
我查看了此处的示例,从此处的其他帖子中挖掘了一些参考资料,并找到了答案... 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>
所以现在最重要的是,当我触发具有 Card Id 的事件时,我需要做的就是重置 CollectionViewSource ...
DirectCast(Me.FindResource("CardDetails"), CollectionViewSource).Source = taCardDetails.GetDataById(CardId)
... WPF 的所有绑定元素完成其余的工作!
好处是我可以轻松创建其他转换器,将它们添加到应用程序中其他地方的各种 DataTemplates 或列中,一旦我将所有数据放入 WPF 应用程序本身,就可以在不进入数据库的情况下进行转换.