2014-03-26 84 views
0

这是我的问题:我需要使用WPF动态组合框来创建DataGrid。如果组合框的值已在前面的行中使用,则下一个将由用户添加的组件不应包含已使用的项目。在DataGridComboboxColumn中删除或添加项添加或删除

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

我没有IDEIA如何做到这一点,任何人都可以证明我的光?

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

谢谢!

+0

我只是有一个IsSelected属性和过滤列表IsSelected = false – Paparazzi

+0

@Blam,我不知道这是否会在我的情况下工作。我没有在我的问题中提到它,但实际上我想隐藏或显示基于列表中对象的整数字段的项目,如果int值为'x',则此值不应出现在下一个的组合框中'x'行。 我认为在这种情况下slu su族的消化能力会更好。非常感谢答复。 – dbiagi

+0

你在问题中说的是它不应该出现,如果它已经被使用。 – Paparazzi

回答

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,并且只需从该静态副本中删除项目(当它们被选中时将其添加回来,并在未选中时将其添加回来)。您选择哪个选项将取决于列表可以修改多少次,因为选择了项目以及生成列表有多复杂。过去我多次使用动态生成的列表,这是一个在大多数情况下运行良好的选项。

+0

我会尽力根据你的回答解决我的问题,如果它有效,我会告诉你。谢谢回复。 – dbiagi