在行添加或删除时删除或添加DataGridComboboxColumn中的项目

时间:2014-03-26 20:06:09

标签: c# wpf datagrid combobox datagridcomboboxcolumn

这是我的问题:我需要使用WPF创建一个带有动态组合框的DataGrid。如果组合框的值已经在前面的行中使用过,那么将由用户添加的下一个组合不应包含已使用的项目。

在此图像中,项目A不应该在第二行的组合框上显示。

我没有意识到如何实现这一目标,有人能给我一个亮点吗?

OBS:DataGrid ItemsSource绑定到ObservableCollection,DataGridComboBoxColumn ItemsSource是List。

谢谢!!!

1 个答案:

答案 0 :(得分:0)

组合的ItemsSource不必绑定到ObservableCollection,但它可以帮助您,具体取决于您如何解决这个问题。

当该单元格进入编辑模式时,ItemsSource绑定的属性会被命中 - 因此每次遇到getter时都可以返回一个新的项目列表。这是一个非常基本的例子,可以给你一个想法:

public List<string> MyItemsSource
{
    get 
    {
        var myNewList = MyMasterList.ToList(); //create a (reference) copy of the master list (the items are not copied though, they remain the same in both lists)
        if (PropertyA != null)
            myNewList.Remove(PropertyA);

        return myNewList;
    }
}

因此,您创建和返回的是所有可能项目的主列表的过滤版本。 LINQ对您有很大的帮助。

或者,您可以将主列表的一个静态副本保留为ObservableCollection,并且只需在该静态副本被选中时将其删除(并在取消选中时将其重新添加)。您选择哪个选项取决于由于选择的项目以及生成列表的复杂程度,可以修改列表的次数。我过去多次使用动态生成的列表,它在大多数情况下运行良好。