【问题标题】:MVVM Silverlight 4 Parent Child View ModelsMVVM Silverlight 4 父子视图模型
【发布时间】:2011-05-31 17:12:41
【问题描述】:

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

我已经简要地研究了创建一个新的视图模型,其属性是组合框视图模型,但绑定似乎不起作用。

有什么想法吗?

谢谢,格雷姆

【问题讨论】:

    标签: silverlight mvvm viewmodel parent


    【解决方案1】:

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

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

    【讨论】:

    • 嗨。澄清。 MainPage 包含 usercontrolA,其中包含一个用于说订单的组合框。 usercontrolA 具有 OrdersViewModel 的数据上下文。组合 itemssource 绑定到 Orders 集合,并且 selecteditem 绑定到选定的单个实体。主页包含 usercontrolB、usercontrolC 等,它们以相同的方式设置,但用于不同的项目集合。这些控件可以完美运行。我想要做的是,在主页上,当按下按钮时收集所有选定的值(使用 mvvm)并插入到数据库中。
    • 我想如果我可以将主页上的文本框绑定到其中一个组合框的选定值,这将是朝着正确方向迈出的一步......我想尝试避免消息或事件并保持简单??
    • 如果我理解正确,您可以从 MainPage(或其视图模型)访问 UserControls 的 ViewModel,如果是这样,您可以从这些 ViewModel 中读取 SelectedComboBox 的属性。
    • 是的,这是正确的。这样做对我来说很容易是代码,但我正在寻找一种更优雅的方式,即使用 mvvm 绑定而不是后面的代码,我不知道该怎么做!
    【解决方案2】:

    如果我对您的理解正确,您的 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; }
    }
    

    然后就可以绑定了:

    • ComboBox1ItemsItemsSourceComboBox1
    • SelectedItemFromComboBox1SelectedItemComboBox1
    • ComboBox2ItemsItemsSourceComboBox2
    • SelectedItemFromComboBox2SelectedItemComboBox2

    感谢MainViewModel,您可以访问组合框中的选定值。

    我希望你能从我的解释中理解一些东西;)

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

    【讨论】:

    • 不确定我是否理解您的意思...我上面的 cmets 是否增加了任何价值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多