如何用内在的观点来处理外在的行为
本文关键字:处理 观点 何用内 | 更新日期: 2023-09-27 18:09:45
我有一个非常令人沮丧的问题:我有一个外部视图,顶部有一个丝带条。还有另一个视图,它持有1…n视图模型和显示数据表列表中的数据网格。显示哪一个取决于用户。用户可以在ribbon栏上选择一个按钮,该按钮应该对Datagrid中选定的行发出操作。但是怎么做呢?我可以很容易地在活动ViewModel上启动一个方法,但是这个方法随后需要获得所有选中的行——这将违背MVVM背后的思想。什么好主意吗?
屏幕如下:http://s7.directupload.net/file/d/3228/a3m3ttu9_jpg.htm
按钮"Zeile raus",应该在右下角Tabcontrol中包含的ViewModel/view中产生效果。Effect需要知道哪些行被选中
让按钮从它的命令执行方法发布一个事件:
public class RibbonViewModel {
IEventAggregator events;
public RibbonViewModel (IEventAggregator events){
this.events = events;
}
public void ButtonClickCommandExecute(){
events.Publish(new SomeMessage{
SomeNumber = 5,
SomeString = "Blah..."
});
}
}
你的每个ViewModel都应该订阅这个事件,如果它是"活动的"ViewModel,就对它做出反应:
public class ViewModelWithDataGrid : IHandle<SomeMessage>{
public void Handle(SomeMessage message){
if(IsActive){
//do something with the message
}
}
}
这样事件源就不会耦合到事件接收器,并且您可以轻松地在VM应该响应事件时进行单元测试。
文档:http://caliburnmicro.codeplex.com/wikipage?title=The%20Event%20Aggregator&referringTitle=Documentation