2010-02-28 28 views
1

做這樣的事情:如何將ViewModel應用於頁面內的UserControl?

<DataTemplate DataType="{x:Type vm:AllCustomersViewModel}"> 
<vw:AllCustomersView /> 
</DataTemplate> 

作品在ResourceDictionary時,我想一個ViewModel應用於UserControl爲根,但我怎麼同樣的事情時,我有一個UserControl一個Page?``\ Would I create a資源字典for all my Pages then at the top of each內Page`這樣做:

<Page.Resources> 
     <ResourceDictionary Source="../MainWindowResources.xaml"/>   
</Page.Resources> 

回答

0

(。我不評論這個問題表示歉意我的評論太長)

您能否澄清這個問題?

你有一個用戶控件在自己的資源中提到了DataTemplate,對吧?

現在你想在頁面中使用這個控件,對吧?

而你的問題是:你需要爲使用它的每個頁面中的UserControl聲明資源嗎?

如果只有用戶控制本身需要訪問這些資源,否則不需要在別處重新聲明它們。如果您希望這些資源可用於託管頁面(或層次結構中的某個元素),則應在此處聲明資源。如果應用程序在應用程序的任何位置都可用,建議在應用程序級別聲明它們。

+0

是的,我有一個用戶控件,我想在一個頁面內。我問的是如何將ViewModel從App.xaml應用到頁面內部的UserControl?謝謝! – Mike 2010-02-28 20:16:43

+0

在MVVM應用程序中,需要一些輔助方法來實現視圖和視圖模型之間的連接。我使用Mark Smith的圖書館:http://www.julmar.com/blog/mark/2009/08/04/MVVMHelpersV103.aspx。它定義了一個服務,該服務創建一個新窗口並將數據上下文正確設置爲視圖模型。 – Timores 2010-03-01 06:05:42

0

更好的選擇是將資源包含在App.xaml中。這樣,任何你在應用程序中顯示ViewModel的地方都會得到模板。

0

我同意安倍。所有你需要做的是資源字典文件添加到項目中(如Resources.xaml

<DataTemplate DataType="{x:Type vm:AllCustomersViewModel}"> 
<vw:AllCustomersView /> 
</DataTemplate> 

它的內部,然後在App.xaml中提出以下幾點:

<Application.Resources> 
    <ResourceDictionary Source="Resources.xaml"/> 
</Application.Resources> 

因此,每當WPF試圖找出如何呈現一個類(它目前不知道如何呈現),它會查找控件資源,如果沒有模板,它會檢查控件容器資源。在那裏,它一直持續上升,直到沒有容器,然後去Appl ication.Resources。如果它發現它,那麼它使用該模板呈現。如果不是那麼它只是調用ToString()。把你所有的全局資料放到Application.Resources中,這樣你就不會在你的應用程序中重複自己,保持乾爽(不要重複自己)。

在側面說明。我發現this post是將大量ViewModel綁定到視圖而不明確寫入資源字典中的每個ViewModels的最簡單解決方案。它使用IValueConverter來動態返回所需的視圖。

+0

但問題是,AllCustomersView是,並且不能應用一個DataTemplate這樣: 對一個Page來說,DataTemplate應用於派生自ContentControl的東西,比如AllCustomersView所沒有的UserControl。我想將DataTemplate應用於AllCustomersView頁面內的UserControl。 – Mike 2010-03-02 08:26:02

相關問題