这是我的问题:我需要使用WPF创建一个带有动态组合框的DataGrid。如果组合框的值已经在前面的行中使用过,那么将由用户添加的下一个组合不应包含已使用的项目。
在此图像中,项目A不应该在第二行的组合框上显示。
我没有意识到如何实现这一目标,有人能给我一个亮点吗?
OBS:DataGrid ItemsSource绑定到ObservableCollection,DataGridComboBoxColumn ItemsSource是List。
谢谢!!!
答案 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,并且只需在该静态副本被选中时将其删除(并在取消选中时将其重新添加)。您选择哪个选项取决于由于选择的项目以及生成列表的复杂程度,可以修改列表的次数。我过去多次使用动态生成的列表,它在大多数情况下运行良好。