使用Wpf ComboBox进行父/子表数据绑定

3
我是新手,对WPF和数据绑定一无所知。我在一个小应用程序中尝试了WPF。 现在我在使用CollectionViewSource与combobox时遇到了问题。
在DataGrid中,我展示了"OrderDetails"表的内容。 现在的问题是:我想将"PartId"字段显示为Combox。该Combox应包含所有"Parts"并显示"Name"而不是PartId。
(抱歉,我无法上传数据库布局的图片)
表 "OrderDetails": Id, OrderId, PartId, Count
表 "Parts": Id, Name, Description, Price
<DataGrid Margin="80,0,0,0" Background="Transparent" HeadersVisibility="Column" 
  ItemsSource="{Binding Source={StaticResource projectsOrderdetailsViewSource}}">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Fahrzeug" Width="SizeToHeader">
            <DataGridTemplateColumn.CellTemplate>
                 <DataTemplate>
                     <ComboBox  DisplayMemberPath="Name"
                       ItemsSource="{Binding Source={StaticResource partsViewSource}}" 
                       SelectedValue="{Binding Path=ID}"
                       SelectedValuePath="{Binding Path=PartId}"/>
                 </DataTemplate>
             </DataGridTemplateColumn.CellTemplate>
         </DataGridTemplateColumn>
....

数据表格和包含组合框都被显示了,但是:

  1. 数值没有正确地显示。
  2. 如果我从组合框中选择任何内容,所有数据表格的项目都会获得选定的值。

你能帮助我正确配置组合框吗?


现在的代码会发生什么? - Kevin DiTraglia
数据网格和包含的组合框都显示出来了,但是值没有正确显示。 如果我从组合框中选择任何内容,数据网格的所有项目都会获得所选值。 - boggi
1个回答

0

你可能正在绑定到单个partsViewSource。

partsViewSource需要成为projectOrderdetailsViewSource的属性,以便每一行都有自己的partsViewSource

该列表需要成为公共属性,以便每一行都有自己的列表。

class order
{
    public Int ID {get; private set;}
    public List<string> Parts { get; set }
}

谢谢,能帮我写一下你的答案的Xaml代码吗? - boggi
谢谢,能帮我写一下你的答案的Xaml代码吗?当前的Xaml代码: <CollectionViewSource x:Key="partsViewViewSource" Source="{Binding Path=Parts, Source={StaticResource database}}" /><CollectionViewSource x:Key="projectOrderDetailsViewSource" Source="{Binding Path=xyz, Source={StaticResource xyz}}" /> - boggi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接