2013-04-17 35 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

解決它,忘記訂閱事件... –