从一个ViewModel传递到另一个

时间:2014-06-02 07:54:49

标签: c# wpf mvvm treeview

我有一个ProductCategoryViewModel,其中我有一个treeView控件,它绑定到我的viewModel中的一个集合,在treeView控件上有一个上下文菜单。当选择了上下文菜单时,我打开另一个窗口,在窗口上有一个文本框和两个按钮,确定和取消,这里用户可以在文本框中输入一个类别名称,当单击确定时我想将类别添加到数据库中,我也想关闭窗口并填充ProductCategoryViewModel的CategoryCollection(以反映更改)这些是我的要求。

我的问题是:

1 - 我需要为新窗口创建一个单独的viewModel,并编写将类别添加到数据库中的代码,或者只是为我的ProductCategoryViewModel中的按钮创建一个字符串属性和两个命令,ok和cancel,然后写入在那里插入逻辑, 当Ok命令被调用时。

2 - 如果我为Window创建一个新的ViewModel,我如何与ProductCategoryViewModel进行通信(刷新CategoryCollection)。

3 个答案:

答案 0 :(得分:1)

  1. 绝对取决于你。我不会写逻辑来实现 在我的viewmodel中插入数据库,但可能会降低级别 专职工作人员为您处理(可能会查看Repository Pattern

  2. 我使用EventAggregator中的Prism有很好的经验。将EventAggregator注册为一个很容易 ViewModel并调用您的事件(在您的示例中,它将是 添加到CatergoryCollection

    //Subscribe
    eventAggregator.GetEvent<CategoryUpdated>().Subscribe(ExitMethod);
    
    // Publish
    eventAggregator.GetEvent<CategoryUpdated>().Publish();
    

答案 1 :(得分:0)

作为评论开始,并继续增长......所以我们走了:

  1. 这听起来不像是一个问题,但更像是缺乏知识,可能不会遵守网站的问题规则。

  2. 话虽如此,如果你正在使用一个框架(比如mvvm-light),他们通常会有一个信使。

  3. 查看我的big mvvm template。您可以从那里轻松选择所需内容,并了解如何使用信使类。

  4. 根据复杂程度和范围,有时一个简单的hack(字符串和几个命令)是一个有效的选项。

    我确定我已经在代码项目中看到了MVVM的弹出式实现......也许你应该看看它...

答案 2 :(得分:0)

This可以帮助开始:)。我宁愿采取第一种方法,因为为viewModel编写单元测试更容易。