2012-01-03 27 views
2

我爲我的項目使用Caliburn Micro,並決定使用Fluent Ribbon作爲UI的一部分。我的ShellView非常簡單,它的佈局如下:將Ribbon控件與Caliburn Micro接口的好方法是什麼?

  • 功能區控制4個選項卡。
  • ActiveItem。

活動項目根據功能區的選定選項卡動態更改。

問:

什麼是用絲帶控件作爲我的當前活動視圖模型(ActiveItem)的第二圖的正確方法,同時保持模塊化和所有配備CM本身繼承的好東西?另外,在我的ViewModels中「共享」我的Ribbon控件需要什麼?

詳情:

我ShellViewModel的類型是「Conductor.Collection.OneActive」的,它改變了ActiveItem特定視圖模型我選擇的選項卡(在觸發事件)相關聯。

我的色帶在XAML定義是這樣的:

<ContentControl x:Name="RibbonBar" Micro:View.Model="{Binding ActiveItem}" Micro:View.Context="Ribbon" /> 

,因爲它表明,織帶控制綁定到,因爲它的上下文視圖當前活動項目。這實際上適用於一個視圖,因爲由於默認的CM約定,它在子命名空間中查找上下文視圖(例如,如果我的視圖路徑是Views.TasksTabView,它將查找Views上的Context視圖.TasksTab.Ribbon)。

問題是,當我更改ActiveItem時,由於命名空間不同,無法再定位上下文視圖,所以它只適用於一個Tab。

我也試着寫我自己的ViewLocator約定,但我沒有成功。

謝謝。

回答

2

不幸的是,由於沒有答案,我會自己回答。

我確實設法編寫了額外的ViewLocator邏輯來定位我的功能區,但是這造成了一些問題(似乎在CM中的綁定只能工作一次,所以在功能區被定位並綁定到虛擬機之後,沒有什麼,也有一些很難找到的錯誤)。

我採取了不同的方法。我已將Ribbon分離到它自己的ViewModel中,並將其與其餘模塊進行合成。它使用EventAggregator,我也在需要的地方注入它。不是我希望的方法,但它現在可行。

如果有人發佈更好的答案,我會definitelly接受那一個。