2012-06-26 52 views
0

此UI由Main.xaml組成,其中包含一個包含(Person.xaml)的導航框架,因此涉及兩個不同的視圖模型。Silverlight - 視圖模型之間的通信

enter image description here

我想被點擊Main.xaml菜單時,DataGrid的內容進行過濾。

  • 人物(顯示所有)
  • 分數低於50

我的方法是通過具有PersonViewModel使用MVVM光消息

  • 分數高於50訂閱在其上從發送特定消息MainViewModel。這會起作用,但是有沒有其他方法可以做到這一點(最佳做法)?

    如果有更好的方法解決這個問題,我不願意爲所有的場景實現MvvmLight消息傳遞,其中來自不同視圖模型的UI元素需要進行通信。

  • +0

    在路由事件骨幹Silverlight的缺乏界面,這可以很好地實現上WPF通過傳遞'IInputElement'上視圖模型的構造,然後用它來傳遞消息ANYWHERE(視圖/視圖模型)。看到這裏的想法http://stackoverflow.com/a/11068208/212706 – ktutnik

    回答

    2

    如果你使用的是MVVM燈,我猜你已經在ViewModelLocator中創建了這些視圖模型。所以只需使用它來在應用程序中的視圖模型之間進行訪問。

    另一種方法是使用某種類型的IoC容器,如Unity或SimpleIoC。

    我希望這可以幫助你。

    +0

    我想我會採用這種方法。謝謝! – Kman

    +0

    無法在我的viewmodel基礎上實現ICommand是一種解決問題的方法 – Kman

    0

    對於這樣的簡單場景,使用幾個ViewModels似乎不太合適。 我相信你應該直接在PersonViewModel中插入過濾器選項

    +0

    這只是一個例子,真正的應用程序將在導航中有幾個視圖:Frame,所以左邊的菜單將不得不與任何viewmodels中的導航視圖:Frame被綁定到。 – Kman

    1

    我們也使用MVVM燈。從我的理解你的要求。您可能只需使用一個DomainContext,然後將所有實體加載到它,然後查詢每個單擊項目的上下文。

    一旦你有一個上下文,你基本上可以動態地查詢它。這是來自我的一個代碼的東西。

    GetUserBUGroups = SecurityDomainContext.Current.UserBUGroups.Where(ub => ub.UserID == GetUsers.UserID).OrderBy(o => o.BUGroup.BUGroupDesc).ToList(); 
    
    +0

    有趣的方式來解決問題!我從來沒有想過這是一個可能的解決方案:) – Kman

    相關問題