Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 数据网格和单元级组合框 脚本_Wpf_Datagrid_Combobox - Fatal编程技术网

Wpf 数据网格和单元级组合框 脚本

Wpf 数据网格和单元级组合框 脚本,wpf,datagrid,combobox,Wpf,Datagrid,Combobox,组合框C取决于组合框B的选定值,而组合框B的选定值取决于组合框A的选定值。所有这些组合框都位于数据网格中 常见路障: 用户必须能够添加新行(这需要具有无参数构造函数的ItemsSource项类型) 要访问数据库以填充组合框的可用选项列表,当前项目需要将数据库凭据/DataContext传递到构造函数中 尝试1 我尝试使用3个CollectionViewSources,每个ComboBox()对应一个,但是ComboBox的SelectedItem会在其他DataGrid行中自动选中。我需要找到一

组合框C取决于组合框B的选定值,而组合框B的选定值取决于组合框A的选定值。所有这些组合框都位于数据网格中

常见路障:

  • 用户必须能够添加新行(这需要具有无参数构造函数的ItemsSource项类型)
  • 要访问数据库以填充组合框的可用选项列表,当前项目需要将数据库凭据/DataContext传递到构造函数中
  • 尝试1 我尝试使用3个CollectionViewSources,每个ComboBox()对应一个,但是ComboBox的SelectedItem会在其他DataGrid行中自动选中。我需要找到一种方法将CollectionViewSource隔离到每一行

    我考虑过只将CollectionViewSource数据添加到每个DataGrid项中,这样我就可以通过这种方式绑定到它,但我必须访问数据库才能生成CollectionViewSource

    我还尝试不共享CollectionViewSource,如中所示,但这破坏了3个组合框之间的链接以及行。如果我可以将CollectionViewSources设置为在每个DataGrid行中共享,而不是在每个DataGrid行之间共享,我认为它会起作用。我就是找不到办法

    尝试2 我已经看了这个问题:

    这会起作用,但用户需要能够向DataGrid添加行。该问题中的示例代码还使用了无参数构造函数。我所处的情况是,必须将访问数据库以填充列表的权限传递给构造函数

    问题
    如何正确执行此操作?

    绑定到
    列表
    可观察集合
    ,而不是
    集合视图源


    CollectionViewSource
    跟踪当前项,因此更改一个组合框中的值将更改所有组合框中的值

    我需要跟踪当前项,以便知道如何填充组合框B&C。但是,我不希望它影响所有行。组合框B根据A中的CurrentItem填充,C根据B中的CurrentItem填充。@Paxenos所选项目应在数据对象中跟踪,而不是在集合中跟踪。例如,将
    ComboBoxA.SelectedItem
    绑定到
    SelectedItemA
    ComboBoxB.SelectedItem
    绑定到
    SelectedItemA.SelectedItemB.SelectedItemC
    ,以及
    ComboBoxC
    绑定到
    SelectedItemA.SelectedItemB.SelectedItemC
    数据对象中是否也保留了用于填充框的集合?@Paxenos No,这些项目似乎是静态的,应该存储在其他地方。通常在这种情况下,我会有一个所有ComboBoxA项目的静态列表,每个ComboBoxA项目都会有它的ComboBoxB项目列表,以此类推。在绑定中,我会将ItemsSource设置为等于静态项列表,并将
    SelectedItem
    设置为等于数据对象上的项。数据对象上的项通常存储为键,例如整数,并公开一个公共属性,该属性返回
    StaticList.FirstOrDefault(p=>p.key==DataItemKey)