2011-07-13 82 views
3

以下是一個簡單的問題:您如何將視圖鏈接到視圖模型?複合WPF:數據模板與視圖模型注入

基本上有兩種常見的方法來實現,數據模板和視圖模型注入(下面的示例)。

我想知道的是爲什麼你更喜歡一種方法而不是其他方法,在這種情況下你使用它們。精確使用您的MVVM框架。


數據模板的方式或 「視圖模型第一」 的方法(Resources.xaml):

<DataTemplate DataType="{x:Type my:PersonViewModel}"> 
    <my:PersonView/> 
</DataTemplate> 


視圖模型噴射方式或 「查看第一個」 的方法(PersonView .xaml.cs):

[Import] 
public PersonViewModel ViewModel 
{ 
    set 
    { 
     this.DataContext = value; 
    } 
} 

回答

11

我更喜歡使用的DataTemplates

  • 這使我可以設置多個視圖基於屬性

  • 我的ViewModels是我的應用程序相同的視圖模型和視圖是沒有什麼比一個漂亮更層,使我的ViewModel的用戶友好。如果我使用ViewModel注入,比視圖成爲我的應用程序和開發團隊突然不得不擔心的東西

  • 我的ViewModels是由其他ViewModels管理。例如,一個ViewModel可能包含顯示在TabControl中的其他ViewModel的集合。添加或關閉選項卡是在父視圖模型內完成的。使用視圖控制應用程序狀態不容易實現這種事情。

  • 我可以初始化使用基於我的需求,而不必使用通用導入那些

這只是幾個原因參數化的構造不同的ViewModels ......我敢肯定有別人,但他們不」現在想起來

+0

那麼你使用什麼框架? – Ucodia

+0

@Ucodia我通常使用PRISM,但我有時使用MVVM Light Framework,因爲當'CanExecute'參數改變時,它們的'RelayCommand'會在命令上產生一個PropertyChanged事件,而PRISM的'DelegateCommand'則不會。 – Rachel

+0

好的謝謝。那麼你使用棱鏡的區域特徵嗎?因爲這是Prism的一個非常有趣的功能,但是這個使用了一種「先查看」的方法。 – Ucodia

0

我們使用視圖模型的第一種方法因爲我們發現它更易於管理,特別是在大型企業應用程序上。我們使用Caliburn.Micro來照顧視圖位置和綁定。

0

我同時使用。 DataTemplates適用於小型項目,但對於較大型或團隊項目,我們使用視圖模型注入。