MVVM Silverlight 4父子视图模型

时间:2011-05-31 17:12:42

标签: silverlight mvvm viewmodel parent

我有一个包含数字组合框的页面。每个组合框都绑定到一个单独的视图模型。我如何从组合框中获取所有值并将它们传递给另一个视图模型(使用mvvm)?

我简要介绍了如何创建一个新的viewmodel,其属性是组合框视图模型,但绑定似乎不起作用。

有什么想法吗?

谢谢,Graeme

2 个答案:

答案 0 :(得分:0)

如果我理解正确,你应该将父绑定到组合框的SelectedItem。我担心你的SelectedItem已经绑定到你的ComboBox的视图模型,但这通常 并不是一个好主意。

ViewModels只能在控件中私下使用。例如,在组合框中,您可能希望创建一个包含该组合框的新用户控件。这样,您可以在用户控件中处理所有“子”视图模型内容,并且新用户控件的使用者可以绑定并与其选择的任何元素进行交互,而不受约束。

答案 1 :(得分:0)

如果我完全理解你,你有ComboBoxes填充了分离的ViewModel(使用ItemsSource),那么要从它们获取值,你应该将它的SelectedItem属性绑定到一个ViewModel。

为了向您展示我的意思,我们假设我们有2个ViewModel:

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

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

和一个常见的ViewModel:

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; }
}

然后你可以绑定:

  • ComboBox1Items ItemsSource ComboBox1
  • SelectedItemFromComboBox1 SelectedItem ComboBox1
  • ComboBox2Items ItemsSource ComboBox2
  • SelectedItemFromComboBox2 SelectedItem ComboBox2

感谢MainViewModel,您可以访问ComboBox中的选定值。

我希望你理解我的解释;)

上面的代码当然是简化版 - 所有ViewModel都应该实现INotifyPropertyChanged接口。