2011-05-31 78 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