我有一个包含数字组合框的页面。每个组合框都绑定到一个单独的视图模型。我如何从组合框中获取所有值并将它们传递给另一个viewmodel(使用mvvm)?MVVM Silverlight 4父子查看模型
我简要介绍了创建一个新的viewmodel,它的属性是组合框视图模型,但绑定看起来不起作用。
任何想法?
感谢,格雷姆
我有一个包含数字组合框的页面。每个组合框都绑定到一个单独的视图模型。我如何从组合框中获取所有值并将它们传递给另一个viewmodel(使用mvvm)?MVVM Silverlight 4父子查看模型
我简要介绍了创建一个新的viewmodel,它的属性是组合框视图模型,但绑定看起来不起作用。
任何想法?
感谢,格雷姆
如果我理解正确的话,你应该有父绑定到ComboBox的的SelectedItem。我的恐惧是,你的SelectedItem已经绑定到你的ComboBox的视图模型,但这通常是不是一个好主意。
ViewModels只能在控件中私下使用。因此,例如,在您的组合框中,您可能想要创建一个包含该组合框的新用户控件。通过这种方式,您可以在用户控件中处理所有“子视图”模型内容,并且新用户控件的使用者可以绑定任何所选元素并与其进行交互,而不受约束。
如果我理解你正确地有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; }
}
,然后你可以绑定:
ComboBox1Items
与ItemsSource
的ComboBox1
SelectedItemFromComboBox1
与ComboBox1
ComboBox2Items
SelectedItem
与ComboBox2
SelectedItemFromComboBox2
ItemsSource
与ComboBox2
得益于它在MainViewModel
的SelectedItem
您可以访问在组合框选择的值。
我希望你能理解我的说明的东西;)
上面的代码简化过程的版本 - 所有的ViewModels也许应该实现INotifyPropertyChanged接口。
不知道我明白你的意思...做我上面的评论添加任何价值? – 72GM 2011-06-01 16:39:11
嗨。澄清。 MainPage包含usercontrolA,其中包含用于说明订单的组合框。 usercontrolA具有OrdersViewModel的数据上下文。组合itemssource绑定到Orders集合,并将selecteditem绑定到选定的单个实体。主页面包含usercontrolB,usercontrolC等,它们以相同的方式设置,但对于不同的项目集合。这些控件完美地工作。我想要做的是,在主页面上,按下按钮时收集所有选定的值(使用mvvm)并对数据库执行插入操作。 – 72GM 2011-06-01 10:44:56
我想如果我可以将主页上的文本框绑定到其中一个组合框的选定值,这将是正确方向上的一步...我想尝试并避免消息或事件并保持简单?? – 72GM 2011-06-01 15:53:39
如果我正确理解你,你可以从MainPage(或它的视图模型)访问UserControls的ViewModels,如果可以的话,你可以从这些ViewModels中读取SelectedComboBox的属性。 – 2011-06-01 19:20:48