2014-03-26 83 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