【发布时间】:2011-05-31 17:12:41
【问题描述】:
我有一个包含数字组合框的页面。每个组合框都绑定到一个单独的视图模型。我如何从组合框中获取所有值并将它们传递给另一个视图模型(使用 mvvm)?
我已经简要地研究了创建一个新的视图模型,其属性是组合框视图模型,但绑定似乎不起作用。
有什么想法吗?
谢谢,格雷姆
【问题讨论】:
标签: silverlight mvvm viewmodel parent
我有一个包含数字组合框的页面。每个组合框都绑定到一个单独的视图模型。我如何从组合框中获取所有值并将它们传递给另一个视图模型(使用 mvvm)?
我已经简要地研究了创建一个新的视图模型,其属性是组合框视图模型,但绑定似乎不起作用。
有什么想法吗?
谢谢,格雷姆
【问题讨论】:
标签: silverlight mvvm viewmodel parent
如果我理解正确,您应该将父绑定到组合框的 SelectedItem。我担心您的 SelectedItem 已经绑定到您的 ComboBox 的视图模型,但这通常不是一个好主意。
ViewModel 只能在控件中私下使用。因此,例如,在您的组合框中,您可能希望创建一个包含该组合框的新用户控件。这样,您可以处理用户控件中的所有“子”视图模型内容,并且新用户控件的使用者可以绑定并与其选择的任何元素进行交互而不受限制。
【讨论】:
如果我对您的理解正确,您的 ComboBox 中填充了单独的 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,您可以访问组合框中的选定值。
我希望你能从我的解释中理解一些东西;)
上面的代码当然是简化版——所有的 ViewModel 都应该实现 INotifyPropertyChanged 接口。
【讨论】: