2012-03-04 58 views
10

我試圖找出在MVVM中耦合我的視圖和ViewModels的最佳方法,並且我已經使用鍵入了ViewModel優先方法,輸入 DataTemplates,如this articlethis answer中所述。我使用Prism,並有多個模塊,它們有自己的項目/類庫。我應該在哪裏定義我的數據模板?

我的問題是:我的DataTemplates應該放在我的解決方案中?

  1. 我應該把在資源字典,其生活在具有類型/的ViewModels它呈現在同一個項目中的DataTemplates?
  2. 我應該把DataTemplates放在一個資源字典中,該字典位於具有應用程序的MainWindow(即Shell.xaml)的項目中?
  3. 是否應將這些資源字典添加到App.Current.MainWindow.Resources.MergedDictionaries

我希望這是足夠的信息來描述我正在嘗試做什麼。

更新:查看所選答案的評論。

回答

2

我確定這裏最好的方法是使用Themes \ Generic.xaml資源文件。這是WPF/Silverlight主題引擎使用的文件(它應該完全位於Themes文件夾中,名稱完全是Generic.xaml),並且包含通過整個應用程序共享的資源。您還可以在名稱爲Generic.DataTemplates.xaml的文件夾主題中創建單獨的文件,並從Generic.xaml中爲其添加鏈接。 Google對generic.xaml有很多瞭解,或者您可以在我的答案中看到更多詳細信息:WPF Prism - Where to put Resources?

+0

嘿,謝謝你的建議。我前段時間閱讀過這篇文章,並使用了Rachel在那裏描述的方法。我有一個帶有主題文件夾的基礎結構項目,我在「資源字典」中存儲了我的樣式。問題是這個基礎設施項目被我所有的其他項目/模塊引用。爲了使用類型化的'DataTemplates',我需要引用包含我的ViewModels的項目,這意味着創建一個循環依賴項。我應該創建一個單獨的項目來保存'DataTemplates'嗎? – 2012-03-04 08:30:52

+1

我想你可以在模塊的程序集中創建文件夾主題。我在當前項目中這樣做 - 我在單獨的UI組件中共享模板,幾乎每個模塊的程序集都有它自己的Themes文件夾 – chopikadze 2012-03-04 09:15:05

+0

好的,這聽起來像是要走的路!謝謝,我感謝你的建議。我會看看如果我能得到它的工作。 – 2012-03-04 09:26:16

2

更新說明更清楚。

我會說如果你的DataTemplate是通用的: 即你有一個UserControl綁定到一個ViewModel,並且該ViewModel具有BaseViewModel,它暴露某種屬性。您的DataTemplate正在顯示這些屬性。所以你可以在實現BaseViewModel的每個ViewModel上使用這個DataTemplate。

最好是把它放在App.xaml中,這樣你就可以用鍵把它拉出來並應用到你項目中的不同位置。

但是,如果你的DataTemplate是非常具體的,

即有,只有結合在該視圖模型指定屬性的用戶控件,你知道沒有其他控件將綁定到視圖模型,你將要投入相同的Xaml文件的Resources或您定義UserControl的位置。

+0

據我所知,我可以使用'DataTemplates'來定製數據的顯示,比如'ListBox',我可以重複使用這個'DataTemplate',並通過引用它的'x: Key'。但根據Josh Smith的文章(見上文),我相信我也可以使用**鍵入**'DataTemplates'來將View/UserControl耦合到'ViewModel'。即如果我將ViewModel對象添加到「ListBox」中,WPF將使用DataTemplate中指定的UserControl來呈現ViewModel(而不是使用ToString())。我在這裏? – 2012-03-04 04:48:08

+0

@Angavar是的,你也可以使用輸入的DataTemplate來應用它。我只是給你一個例子,如何使用他們的X:鑰匙拉出模板,樣式等。 – 2012-03-04 18:18:59

0

根據Microsofts App Studio的說法,DataTemplates應該位於Views目錄下的DataTemplates子目錄中。通用應用程序具有Windows用戶界面和Windows Phone UI的此目錄,因此它不在共享項目中,因爲它們不是相同的。不要使用Converge PRISM體系結構。它完全錯誤的設計!這不是在Windows和Windows Phone架構下編寫的,而是像他們稱之爲融合。它應該已經完全重新設計,就像它在微軟AppStudio中的工作一樣。不要尋找它不在其中,也不需要的依賴注入。大多數使用依存注入存根或假接口。用於設計數據的DataContext現在對json數據的作用如此之好以至於依賴注入組件將會過度殺傷。

相關問題