我有一个非常令人沮丧的问题: 我有一个外部视图,顶部有一个Ribbonbar。还有另一个View,它包含1 ... n Viewmodels并显示来自Datatables列表的数据网格。显示哪一个取决于用户。 用户可以选择功能区上的按钮,该按钮应对数据网格中的选定行发出操作。但是怎么做呢? 我可以轻松地在活动的ViewModel上启动一个方法,但是该方法需要获取所有选定的行 - 这将违反MVVM背后的理念。 任何想法?
以下是屏幕外观: http://s7.directupload.net/file/d/3228/a3m3ttu9_jpg.htm
按钮“Zeile raus”,应该在右下方Tabcontrol中包含的ViewModel / Viwe中产生效果。效果需要知道选择了哪些行。
答案 0 :(得分:0)
让按钮从命令执行方法发布事件:
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响应事件,您就可以轻松地进行单元测试。