2013-04-17 50 views
0

我有一个非常令人沮丧的问题: 我有一个外部视图,其顶部有一个Ribbonbar。还有另一个视图,它包含1 ... n Viewmodels并显示数据表列表中的数据网格。显示哪一个,取决于用户。 用户可以在Ribbonbar上选择一个按钮,该按钮应该在Datagrid的选定行上发出一个操作。但如何做到这一点? 我可以很容易地在活动的ViewModel上启动一个方法,但是该方法需要获取所有选定的行 - 这违背了MVVM背后的想法。 任何想法?Caliburn如何从内部视图的外部视图处理动作

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

按钮“Zeile RAU的”,应该引起包含在右下角自定义的Tabcontrol在视图模型/ Viwe的影响。该效果需要知道哪些行被选中。

回答

0

有按钮从其命令发布事件执行方法:

public class RibbonViewModel { 
    IEventAggregator events; 

    public RibbonViewModel (IEventAggregator events){ 
     this.events = events; 
    } 

    public void ButtonClickCommandExecute(){ 
     events.Publish(new SomeMessage{ 
      SomeNumber = 5, 
      SomeString = "Blah..." 
     }); 
    } 
} 

您的每一个视图模型的应该订阅该事件,并对其做出反应,如果它是“活动”视图模型:

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

+0

这看起来很有希望,unfortunaetly “什么也没发生” 的时刻。 我将调查事件发送但未收到的原因。 你知道如何获取datagrid的选定行吗? –

+0

解决它,忘记订阅事件... –