2011-06-06 30 views
0

我使用Silverlight 5的隱式DataTemplates來連接ViewModel和View。帶隱式DataTemplates的MVVM - 明確獲取視圖

在我的MainView中有一個TabControl(來自Telerik),它綁定到MainViewModel的ObservableCollection。對於該集合中所有可能的ViewModel類型,都有一個DataTemplate,它定義了相應的View(= Tab)。

很乾淨,完全解耦。

但現在我需要編寫的代碼實際上只與視圖有關:我想手動合併所選Tab的Ribbon到MainView的Ribbon。 ViewModels不具備任何相應視圖的知識,也不知道有關UI元素(如Ribbon)(這是件好事)。所以這是我需要編寫代碼隱藏的非常罕見的場合之一。

我嘗試了TabControl的SelectionChanged事件,但所有屬性(SelectedItem,SelectedValue,...)都指向ViewModel而不是View。

如何獲取視圖 - 哪些由Silverlight 5使用DataTemplate連線?

感謝您的任何想法!

回答

0

簡短的回答,你沒有。使用具有強類型約束的事件聚合器或信使類。

MVVM-Light的一個很好的實現是Messenger類,請參閱本文以獲取信息。

http://blog.galasoft.ch/archive/2009/09/27/mvvm-light-toolkit-messenger-v2-beta.aspx

無論如何,你應該能夠通過信使有色帶消息的標籤,如果我理解你的權利。

+0

發送一條消息,包含待(未)合併功能區可以工作,我猜。推測標籤的「已加載」和「未加載」事件將是觸發消息的正確位置。但我仍然想知道是否有辦法從隱式DataTemplate通過Silverlight連線時獲得視圖... – 2011-06-06 20:57:14

+0

可能,但這不應該是它的做法... – Firoso 2011-06-06 22:22:28

+0

使用信使解決了我的問題確實。因此,即使我的原始問題(「在通過隱式DataTemplate連接時引用視圖」)仍處於打開狀態,我仍接受了您的答案。 – 2011-06-10 10:06:00