我有一个包含数字组合框的页面。每个组合框都绑定到一个单独的视图模型。我如何从组合框中获取所有值并将它们传递给另一个视图模型(使用mvvm)?
我简要介绍了如何创建一个新的viewmodel,其属性是组合框视图模型,但绑定似乎不起作用。
有什么想法吗?
谢谢,Graeme
答案 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接口。