我具有類似於樣機一個WPF /棱鏡應用如下所示:WPF /棱鏡:嵌套視圖和工具欄
兩者的TabControls包含單獨的棱鏡區,第二個被嵌套到第一一。現在,工具欄應根據當前處於活動狀態的視圖來激活/取消激活項目。
工具欄目前在shell中定義。
我試過使用某種註冊表,其中每個ViewModel可以註冊它支持的工具欄命令。不過,我後來意識到,工具欄無法知道哪個視圖(以及哪個視圖模型)處於活動狀態。
問題是在嵌套,沒有,我可能達到我想要的綁定TabControl.SelectedItem屬性到工具欄,並從上面使用我的註冊表。
也許有更好的方法來做到這一點?或者讓工具欄找出哪個視圖處於活動狀態?
編輯:我現在試圖用ActiveAware的ViewModels在這篇文章中descriped:http://www.codeproject.com/Articles/56826/ViewModel-Active-Awareness-in-a-Prism-Based-Applic,但是我現在有這個問題,當我從標籤「一號」標籤「二」和背部,嵌套選項卡的「開關第一個標籤「GotFocus事件沒有被觸發,這意味着工具欄將代表錯誤的視圖。
也許這是要走的路?
編輯2:問題似乎是,第二個tabcontrol不在它自己的作用域區域內。我正在使用ViewDiscovery方法將視圖添加到我的區域,所以我沒有在範圍內創建區域管理器。 SyncActiveState似乎只適用於作用域區域,因爲在切換視圖時第一個tabcontrol視圖模型會正確更新。
有沒有辦法使用XAML來創建一個範圍的區域,而不是一個正常的區域?
技術上我已經有這樣的東西。然而,這不(至少對我來說)解決了工具欄需要知道哪個視圖處於活動狀態的問題。 – cguedel 2012-07-25 06:05:39
問題確定哪些工具欄按鈕可用,或者工具欄需要知道哪些視圖處於活動狀態?也許我誤解了。在建築方面,我建議保持你的觀點/部分鬆散耦合並實行分離關注。 PRISM的目標之一是消除對獨立組件的需求,以便需要彼此的知識。 – 2012-07-26 01:29:17
問題在於工具欄必須知道哪些按鈕必須處於活動狀態。爲了做到這一點,它必須至少有一點關於活動視圖的知識。 但是,我似乎找不到找出當前哪個視圖處於活動狀態的方法,以便它可以使用eventaggregator將消息發送到工具欄(然後可以激活所需的按鈕)。 – cguedel 2012-07-26 06:01:39