2011-07-21 105 views
3

目前我已經連接到使用類似於下面的代碼的ViewModels一些看法使用DataTemplate中的WPF應用程序鏈接查看到視圖模型:使用MVVM模式

<Application.Resources> 
     <DataTemplate DataType="{ x:Type vm:AgeIndicatorViewModel}"> 
     <v:AgeIndicatorView /> 
    </DataTemplate> 
</Application.Resources> 

我有一個關於這兩個問題:

  • 請問這個方法讓我只有一個鏈接查看每個視圖模型(我認爲它improse此限制我,而是要確保)

  • 使用此方法時,我應該在哪裏放置所有DataTemplate聲明?目前只有少數,他們都在App.Xaml - 有沒有更好的位置,或者是App.Xaml罰款/最佳位置?

最重要的問題是,第二個真的,因爲在現階段,我想我的視圖模型以這種方式鏈接到我的查看,因爲它不需要任何外部庫等

的方式我ViewModels已經設置好了,它們的屬性和命令等已經全部工作了。

回答

2

請問這個方法讓我只有一個鏈接查看每個視圖模型(我認爲它improse此限制我,而是要確保)

是。如果您嘗試將多個ViewModel鏈接到多個視圖,則需要將它們封裝在單獨的VM中,然後添加一個新的DataTemplate。

當使用這種方法時,我應該在哪裏放置所有的DataTemplate聲明?目前只有少數,他們都在App.Xaml - 有沒有更好的位置,或者是App.Xaml罰款/最佳位置?

App.Xaml很好,或者在上面使用DataTemplate的視覺層次結構中的任何地方。這就是說,如果項目成爲一個非常大型的項目,開始使用Merged Resource Dictionaries通常更好 - 這允許您在定義View/ViewModel對的地方設置資源字典「near」,但隨後使用他們在更高的水平(即:合併到App.Xaml中)。

2

像你在你的問題中一樣指定隱式DataTemplate將你的視圖模型綁定到一個視圖。您可以在任何控制水平,雖然覆蓋此,所以你可以有:

<Window.Resources> 
    <DataTemplate DataType="{x:Type vm:AgeIndicatorViewModel}"> 
     <v:AgeIndicatorView2 /> 
    </DataTemplate> 
</Window.Resources> 

這將更改應用於視圖模型對於給定的窗口中的視圖。這可以在任何級別的任何控件上完成。

雖然在應用程序級別執行此操作的好處是它可以應用於應用程序中的所有窗口。雖然我上面的示例只適用於單個窗口。

通常,應用程序資源是定義這些資源的最佳位置。因爲如果您有多個Windows(即Window1和Window2),那麼您的視圖模型將始終選取隱式的DataTemplate。