2011-05-31 71 views
0

我有一個包含數字組合框的頁面。每個組合框都綁定到一個單獨的視圖模型。我如何從組合框中獲取所有值並將它們傳遞給另一個viewmodel(使用mvvm)?MVVM Silverlight 4父子查看模型

我簡要介紹了創建一個新的viewmodel,它的屬性是組合框視圖模型,但綁定看起來不起作用。

任何想法?

感謝,格雷姆

回答

0

如果我理解正確的話,你應該有父綁定到ComboBox的的SelectedItem。我的恐懼是,你的SelectedItem已經綁定到你的ComboBox的視圖模型,但這通常是不是一個好主意。

ViewModels只能在控件中私下使用。因此,例如,在您的組合框中,您可能想要創建一個包含該組合框的新用戶控件。通過這種方式,您可以在用戶控件中處理所有「子視圖」模型內容,並且新用戶控件的使用者可以綁定任何所選元素並與其進行交互,而不受約束。

+0

嗨。澄清。 MainPage包含usercontrolA,其中包含用於說明訂單的組合框。 usercontrolA具有OrdersViewModel的數據上下文。組合itemssource綁定到Orders集合,並將selecteditem綁定到選定的單個實體。主頁面包含usercontrolB,usercontrolC等,它們以相同的方式設置,但對於不同的項目集合。這些控件完美地工作。我想要做的是,在主頁面上,按下按鈕時收集所有選定的值(使用mvvm)並對數據庫執行插入操作。 – 72GM 2011-06-01 10:44:56

+0

我想如果我可以將主頁上的文本框綁定到其中一個組合框的選定值,這將是正確方向上的一步...我想嘗試並避免消息或事件並保持簡單?? – 72GM 2011-06-01 15:53:39

+0

如果我正確理解你,你可以從MainPage(或它的視圖模型)訪問UserControls的ViewModels,如果可以的話,你可以從這些ViewModels中讀取SelectedComboBox的屬性。 – 2011-06-01 19:20:48

0

如果我理解你正確地有ComboBoxes填充分離的ViewModels(使用ItemsSource),所以要從它們獲取值,您應該將其SelectedItem屬性綁定到一個ViewModel。

要告訴你我的意思是,讓我們假設我們有2周的ViewModels:

public class ItemOneViewModel 
{ 
public Name { get; set; } 
} 

public class ItemTwoViewModel 
{ 
public Name { get; set; } 
} 

和一個共同的視圖模型:

public class MainViewModel 
{ 
public ObservableCollection<ItemOneViewModel> ComboBox1Items { get; set; } 
public ObservableCollection<ItemTwoViewModel> ComboBox2Items { get; set; } 

public ItemOneViewModel SelectedItemFromComboBox1 { get; set; } 
public ItemTwoViewModel SelectedItemFromComboBox2 { get; set; } 
} 

,然後你可以綁定:

  • ComboBox1ItemsItemsSourceComboBox1
  • SelectedItemFromComboBox1ComboBox1
  • ComboBox2ItemsSelectedItemComboBox2
  • SelectedItemFromComboBox2ItemsSourceComboBox2

得益於它在MainViewModelSelectedItem您可以訪問在組合框選擇的值。

我希望你能理解我的說明的東西;)

上面的代碼簡化過程的版本 - 所有的ViewModels也許應該實現INotifyPropertyChanged接口。

+0

不知道我明白你的意思...做我上面的評論添加任何價值? – 72GM 2011-06-01 16:39:11