2014-04-11 27 views
0

我們有一個具有典型主/從視圖的應用程序。主視圖顯示機票標題列表,如果您點擊機票標題,則會看到包含機票詳細信息的視圖。在另一個ViewModel中獲取ViewModelReference

主視圖有一個模型,它是一個「票據」對象列表,每個對象都包含有關特定票證的更多信息。我們在點擊時綁定了一個處理程序,它基本上實例化了一個新的細節視圖並顯示它。這工作正常,但我們必須將所有配置值作爲基本數據類型給構造函數(我們知道我們不能在實例化時使用對象)

我們想過另一種方式來做到這一點,但無法獲得它工作。在Init()(詳細視圖模型)中,我們只傳遞點擊標識的ID並想使用Mvx.Resolve來獲得主視圖模型。所以問題是,你可以在其他視圖模型中獲取任意視圖模型嗎?

第二個想法是寫一個基本視圖模型類,從它在我們的應用程序繼承,這對實例註冊視圖模型的服務,使您可以調用該服務,並從任何地方獲取視圖模型中的所有視圖模型(介體模式)。這會違背框架嗎?

我找到的答案是「使用消息」,但對我來說,它似乎有點笨重,至少我是如何理解這一點的。詳細視圖模型必須發送消息給主視圖模型「好吧,我現在準備好」,然後主視圖模型會說「好吧,繼承配置」。

所以總結一下問題:

  1. 是否有可能從內部其他視圖模型框架獲取一定的視圖模型?
  2. 手動執行此操作會違反框架嗎?
  3. 我們是否理解了正確的消息方法,如果不正確,那麼做什麼會更輕量級/通用的方式呢?

歡呼和感謝

湯姆

回答

2

通常當我必須要共享視圖模型數據,我用服務來管理它。該服務通常通過IoC注入。

我將視圖模型視爲服務和視圖之間的中介。我的大部分邏輯都存儲在服務中。我在View Model中唯一的東西是數據綁定的屬性,派發給服務的命令以及其他表示級別的問題。

對於您的情況,我會讓MasterViewModel將標識符傳遞給DetailViewModel,在那裏它將通過id向ConfigurationService請求配置。

希望這會有所幫助。

+0

我們現在將模型註冊爲帶有「Mvx.RegisterSingleton (()=> this)的單身人士;」然後用「Mvx.Resolve ()」檢索它。 所以我認爲IoC方法在這裏工作得很好。我們剛剛沒有正確使用registerSingleton。 – Tom

相關問題