2011-03-01 122 views
0

場景:我在View中有一個ContentControl,其Content屬性與ViewModel中的DataGrid綁定。我將在運行時找到在DataGrid中顯示的列的確切數量,這就是爲什麼我在ViewModel中編程創建DataGrid的原因。我的DataGrid的ItemsSource是一個DataTable。我將DataGrid的'AutoGeneratingColumns'設置爲False,我手動創建列。我的DataGrid以及其他許多列都有兩個ComboBox類型的列。我必須根據第一個ComboBox的選定索引來更改第二個ComboBox的ItemsSource。所以我的DataGrid的每一行都可以爲第二個ComboBox使用不同的ItemsSource。如何更改DataGrid中ComboBox的ItemsSource?

我的問題是如何動態更改第二個ComboBox的ItemsSource基於選定的索引在運行時的第一個ComboBox中的一行DataGrid?我還想知道在這種情況下是否有比我目前的方法更好的解決方案?

+0

假設您的視圖模型中有多個集合可用作第二個組合框的Item Source,那麼這些常見類型的集合呢?如果是,那麼你可以創建一個像SelectedCollection這樣的屬性,並根據第一個組合框的選定項來設置它的值。並將您的第二個組合框項目源綁定到此SelectedCollection屬性。 – RockWorld 2011-03-01 11:26:52

回答

0

如果你使用視圖模型,這並不難。 將組合框itemssources綁定到視圖模型上的屬性。 將第一個組合框的selecteditem綁定到視圖模型上的屬性。 在該屬性的設置器中,更改第二個組合框的集合。

使用viewmodels,這是最簡單的方法。 儘管在你的view中創建datagrid列不是,你可以將它移動到一個輔助類,並從後面的代碼或子類te datagrid調用它。我知道,使用運行時列很難。

更新: 我通常做的是顯示數據時,以及在其上選擇的行組合框正常使用的列。這樣你就不會有這個問題 你必須在數據網格的selecteditem更改時同步selecteditemproperty。這也會觸發第二個組合框的itemssource的更新

另一種選擇是對主集合中的組合框子項進行集合並預填充它們。然後在組合框1中選擇項目的更改上更改組合框2的集合。但是,這可能會有很大的工作量和存儲空間。

+0

我對這種方法有一個疑問/困惑。比方說,我在我的視圖模型中創建一個屬性'SelectedItemProperty',並設置我的第一個組合框的SelectedItem = SelectedItemProperty。我的想法是,我的DataGrid的每一行將使用SelectedItemProperty的相同實例,是不是這種情況?如果每行中的ComboBox綁定到相同的屬性不會導致問題? – 2011-03-01 09:16:12

+0

啊,是的,這可能是一個問題。我通常所做的是在顯示數據時使用普通列,並在所選行中使用組合框。這樣你就不會有這個問題。 – MarcelDevG 2011-03-01 11:30:26

+0

在這種情況下,無論何時您將進入CombobBox模式或編輯模式,首先ComboBox的選定項目始終爲'SelectedItemProperty',而不是用戶在非編輯模式下選擇的項目。對最終用戶而言,這可能會造成問題/困惑。 – 2011-03-01 11:49:55

相關問題