1

我是 mvvm 的新手,我了解基本的 concpects。现在我有一个问题:我有两个不同的视图模型,它们将一起附加在另一个 wpf gui 上。

在一个视图模型中,有一个按钮和一个复选框;(“左侧控制”)现在是“技巧”:在另一个视图模型上也有一个复选框。(“右侧控制”)

现在:如果按钮被点击,那么如果复选框也被设置,则应该检查另一个视图模型。

基本上我会用一个事件或一个“信号”来做,但问题是,如果选中“右侧控件”上的复选框,它需要一个来自“左侧”的值。

实现将由一个事件完成,如果是这样:我如何传递参数?

因为我是那个 mvvm 的新手,所以我不知道我真正在寻找什么以及哪种解决方案是“最先进的”和“mvvm”风格的。

4

3 回答 3

1

看看http://www.galasoft.ch/mvvm/,它有一个 Messenger 类,我认为这正是你需要的

于 2012-04-28T12:12:20.173 回答
0

首先,UI 交互听起来有点复杂——可能值得回顾一下你的 UI 交互——可以简化吗?假设不是(即复杂的 UI 需求是真实的):
听起来左侧视图模型 (LVM) 取决于右侧视图模型 (RVM) 的属性。那么是否可以在您的视图模型属性中设置这种关系,即可以设置 LVM 来保存对 RVM 的引用,并且绑定到复选框本身的属性会检查 RVM 上的依赖属性吗?然后你的命令(绑定在 LVM)只需要检查 LVM 的属性。

于 2012-04-28T11:43:12.017 回答
0

您需要使用一些事件聚合器(例如来自 Prism 库)来处理这些东西。这是一个 c# 伪代码示例,说明如何使用 Prism 的事件聚合器进行操作:

在您的 RVM 中:

_eventAggregator.GetEvent<LeftCBCheckedEvent>()
    .Subscribe(SaveStateOfLeftCBLocally);

...

private void SaveStateOfLeftCBLocally(bool isLeftCBChecked)
{
    _isLeftCBChecked = isLeftCBChecked;
}

在您的 LVM 中:

public bool IsLeftCBChecked {get; set;}
...
_eventAggregator.GetEvent<LeftCBCheckedEvent>().Publish(IsLeftCBChecked);

事件定义:

public class LeftCBCheckedEvent : CompositePresentationEvent<bool>{}

因此,当按下该按钮时,您将已经知道左侧复选框的状态。我强烈建议检查一下 Prism,它是一个很棒的复合应用程序库,我认为它可以为您的项目增加很大的价值。

于 2012-04-28T13:16:02.163 回答