2010-11-23 55 views
4

我正在開發一個相當簡單的WPF應用程序來顯示對象層次結構和所選對象的詳細信息,UserControl在左窗格(樹形控件)中包含TreeView,並且另一個UserControl在右側包裝ListView/GridView(細節控制)。MVVM中的ViewModels適合多少

樹控件使用MVVM後面的this Josh Smith article相當接近,並且有許多ViewModel類型都來源於相同的基類型TreeViewModel。主窗口使用MainWindowViewModel設置,如this Josh Smith article,並公開用於填充第一代樹控件的TreeViewModel

然而,當我要填充的詳細信息窗格的權利,我有樹控制的SelectedItemTreeViewModel衍生當我需要一個完全不同類型的視圖模型爲詳細信息窗格中,將擴大問題使用反射將對象映射到屬性/值的表中。

所以,問題:

  1. 是否適合MainWindowViewModel揭露TreeViewModel爲樹控制?我相信這裏的答案是肯定的,但我願意接受相反的建議。

  2. 樹控件中的所選項應該如何適應詳細信息窗格的正確ViewModel類型?一種選擇似乎是,MainWindowViewModel跟蹤樹中選定的項目並進行適應,將其作爲另一個屬性公開,但我不確定是否有更好的解決方案。

我是新來WPF和MVVM模式,所以請原諒這個問題的基本性質。我花了一些時間閱讀模式的背景,看了一些示例應用程序等,但我無法找到足夠具體的東西讓我對自己的答案充滿信心。我也意識到MVVM對於一個應用程序來說可能過於簡單,但我將它部分用作學習練習。

回答

1

1.是否適合MainWindowViewModel公開樹控件的TreeViewModel的 ?

我相信是的。模型應該隱藏邏輯FOR THE LOOK的外觀,但它不能像邏輯結構那樣隱藏Thign。

2.樹控件中的選定項目應如何適應詳細信息窗格的右側 ViewModel類型? 一種選擇似乎是在 MainWindowViewModel跟蹤 所選的項目,樹並執行 適應,露出它作爲其他 屬性,但我不知道是否有 一個更好的解決方案。

恕我直言,不是。

+0

希望得到一些答案的答案以確認答案......但看起來沒有任何答案即將出現,所以我會接受這個,因爲這是我所做的。 – 2010-11-29 12:16:38

0

對類似問題的工作我得出的結論是

object Tag { get; set; } 

屬性是必然:(除非是一些罕見的情況下(在整個樹狀只有1種類型的對象)。

0

但是,當我想要填充右側的詳細信息窗格時,我遇到了這樣的問題,即當我需要一個完全不同的ViewModel類型的詳細信息窗格時,樹控件的SelectedItem派生自TreeViewModel,該窗格將將對象擴展爲使用反射的屬性/值表。

如果你真的,真的很在意這一點,你可以建立一個公開兩個不同性質的高階視圖模型類 - TreeViewModel類型之一,DetailsViewModel類型之一。然後,主窗口的視圖模型將同一對象暴露給樹控件和細節控件,但是兩個視圖類型的邏輯結構將彼此解耦。

從邏輯上說,樹控件中的選定項目和細節控件中出現的項目是相同的東西。雖然細節控制不會提供有關事物父/子關係的信息,但樹控件不會顯示有關事物名稱/值對的信息,但它仍然是同樣的事情。可能沒有必要太擔心表示事物的單個對象暴露了只有該事物的一個視圖使用的屬性。

相關問題