我是mvvm的新手,我理解基本的观点。 现在我有一个问题: 我有两个不同的视图模型,它们将在另一个wpf gui上连接在一起。
在一个视图模型中,有一个按钮和一个复选框; (“左侧控制”) 现在的“伎俩”: 在另一个viewmodel上也有一个复选框。 (“右侧控制”)
现在:如果按钮被点击,那么应该检查另一个viewmodel是否也设置了复选框。
基本上我会用事件或“信号”来做,但问题是,如果选中“右侧控制”上的复选框,则需要“左侧”的值。
实现将由一个事件完成,如果是这样的话:我怎样才能传递参数??
因为我是那个mvvm的新手,我不知道我到底在想什么,以及哪种解决方案将是“最先进的”和“mvvm”式。
答案 0 :(得分:1)
查看http://www.galasoft.ch/mvvm/,它有一个Messenger类,我认为它正是你需要的
答案 1 :(得分:0)
首先,UI交互听起来有点复杂 - 可能值得回顾一下您的UI交互 - 可以简化吗?假设没有(即复杂的UI需求是真实的):
听起来左侧视图模型(LVM)依赖于右侧视图模型(RVM)的属性。那么是否可以在视图模型属性中设置该关系,即可以将LVM设置为保存ref到RVM,并且绑定到复选框itselft的属性是否检查RVM上的依赖属性?然后你的命令(绑定在LVM上)只需检查LVM的属性。
答案 2 :(得分:0)
您需要使用一些Event Aggregator(例如from Prism library)来表示这些内容。这是一个c#伪代码示例,说明如何使用Prism的Event Aggregator:
在您的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,它是一个很棒的复合应用程序库,我认为它可以为你的项目增加一个很大的价值。