0

我有一个非常令人沮丧的问题:我有一个外部视图,顶部有一个 Ribbonbar。还有另一个视图,它包含 1...n 个视图模型并显示来自数据表列表的数据网格。显示哪一个取决于用户。用户可以在 Ribbonbar 上选择一个按钮,该按钮应该对 Datagrid 中的选定行发出操作。但是如何做到这一点?我可以轻松地在活动 ViewModel 上启动一个方法,但是该方法需要获取所有选定的行——这将违反 MVVM 背后的理念。有任何想法吗?

这是屏幕的外观: http: //s7.directupload.net/file/d/3228/a3m3ttu9_jpg.htm

按钮“Zeile raus”,应该会在右下方 Tabcontrol 中包含的 ViewModel/Viwe 中产生效果。Effect 需要知道选择了哪些行。

4

1 回答 1

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 应响应事件时轻松进行单元测试。

文档:http ://caliburnmicro.codeplex.com/wikipage?title=The%20Event%20Aggregator&referringTitle=Documentation

于 2013-04-17T14:56:38.937 回答