我有以下表格:
公司 {CompanyID, CompanyName}
交易 {CompanyID, Value}
我有一个列表框:
<ListBox Name="Deals"
Height="100" Width="420" Margin="0,20,0,0" HorizontalAlignment="Left" VerticalAlignment="Top"
Visibility="Visible" IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding}" SelectionChanged="Deals_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding companyRowByBuyFromCompanyFK.CompanyName}" FontWeight="Bold" />
<TextBlock Text=" -> TGS -> " />
<TextBlock Text="{Binding BuyFrom}" FontWeight="Bold" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如您所见,我想显示 CompanyName 而不是作为外键的 ID。关系“companyRowByBuyFromCompanyFK”存在,因为在 Deals_SelectionChanged 中,我可以访问 Deals 行的 companyRowByBuyFromCompanyFK 属性,我也可以访问该行的 CompanyName 属性。
这不起作用的原因是因为 XAML 绑定(bind)使用 [] 索引器吗?而不是我的 DataTable 中 CompanyRows 的属性?
目前我得到的值如下
- -> TGS -> 3
- -> TGS -> 4
编辑绑定(bind)错误更新
System.Windows.Data Error: 39 : BindingExpression path error: 'companyRowByBuyFromCompanyFK' property not found on 'object' ''DataRowView' (HashCode=30295189)'. BindingExpression:Path=companyRowByBuyFromCompanyFK.CompanyName; DataItem='DataRowView' (HashCode=30295189); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
看起来它没有将 DataRowView 项目转换为 SuppliersRow
实现此目标的最佳方法是什么?
使用作为自定义参数引用的表制作一个转换器来转换外键。
为每个表创建 TableView ?这会很冗长,因为我有大量具有外键的表。
最佳答案
有人杀了我....感谢您指出输出窗口我总是忘记这一点! :(
我通过查看下面的输出窗口找到了解决方案
System.Windows.Data Error: 39 : BindingExpression path error: 'companyRowByBuyFromCompanyFK' property not found on 'object' ''DataRowView
我发现 DataTemplate 绑定(bind)绑定(bind)到 DataTemplate 的 SelectedItem,它是一个 DataRowView 而不是实际的强类型数据。幸运的是,DataRowView 类有一个指向 DataRow(即 supplierRow)类的 Row 属性,因此我可以像往常一样从那里进行绑定(bind)。修复在以下行中。
<TextBlock Text="{Binding companyRowByBuyFromCompanyFK.CompanyName}" FontWeight="Bold" />
按照我的预期将其更改为以下内容。
<TextBlock Text="{Binding Row.companyRowByBuyFromCompanyFK.CompanyName}" FontWeight="Bold" />
关于C# WPF XAML 绑定(bind)到 DataTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2598961/