2010-10-30 27 views
3

我對如何使用兩個不同的用戶控件創建主細節視圖有點困惑。如何使用MVVM中的兩個用戶控件創建主詳圖視圖?

有三種選擇,

選擇1

CustomerMasterView + CustomerMasterViewModel 
CustomerDetailView + CustomerDetailViewModel 

並保持兩視圖模型在App.Resources

但是通過這樣做,結合變得複雜了所有靜態資源來源標記代碼。

選擇2

CustomerViewModel 
CustomerMasterView 
CustomerDetailView 

這兩種觀點都通過App.Resources共享同一個視圖模型,以及即使綁定代碼有太多的項目。

選擇3

CustomerMasterView + CustomerMasterViewModel 
CustomerDetailView + CustomerDetailViewModel 

兩個視圖的已設置的DataContext到其對應的視圖模型。現在這裏是小問題, CustomerMasterView具有Selector(ListBox或DataGrid或其他),其SelectedItem需要綁定到CustomerDetailViewModel的「Customer」屬性作爲雙向綁定。

它看起來不錯嗎?

<!-- CustomerMasterView --> 

<ListBox 
    ItemsSource="{Binding CustomerList}" 
    SelectedItem="{Binding DataContext.Customer,ElementName=customerDetailView}" 
    /> 

<local:CustomerDetailView 
    x:Name="customerDetailView" 
    /> 

但是,這樣做,因爲它在我的UI代碼將更加依賴我不畏視圖模型的目的。

哪一個是最喜歡的方式還是有其他方法? 我應該創建嵌套視圖模型嗎?

我也在嘗試學習棱鏡,而且我對如何做到這一點沒有什麼困惑,任何幫助都將被評價。

回答

2

在我看來,最簡單的方法就是擁有一個單一的視圖模型,並帶有兩個UserControls。

您的ViewModel將擁有您的客戶列表以及「ActiveCustomer」或「SelectedCustomer」。您馬西德威(與DataContext的設置爲您視圖模型),將包含您的列表,有線像這樣:

<ListBox ItemsSource="{Binding Customers}" SelectedItem="{Binding ActiveItem, Mode=TwoWay}" />

你馬西德威還將包括您的DetailsView(另一個用戶控件)。它看起來像這樣:

<views:DetailsUserControl DataContext="{Binding ActiveItem}" />

+0

相反,我使用ActiveItem的嵌套視圖模型,因爲詳細視圖模型已經有很多東西了。 – 2010-11-03 13:03:18

0

您可能會感興趣的WPF Application Framework (WAF)BookLibrary示例應用程序。它演示瞭如何使用兩個視圖(單獨的UserControls)和兩個ViewModel實現主/細節方案。

相關問題