2010-12-14 86 views
0

我已經構建了WPF UserControl View/ViewModel對:視圖XAML處理佈局和綁定,ViewModel處理邏輯,符合推薦MVVM模式。如何封裝WPF ViewModel /查看UserControl作爲控件

我希望能夠重新使用這個作爲控件。

如何隱藏/封裝與視圖關聯的ViewModel,以便我可以像使用標準控件[比如按鈕]一樣使用控件?

即如何隱藏控件的viewmodel?

回答

2

取決於您如何將ViewModel類綁定到控件。 如果你這樣做:

YourControl() 
{ 
    DataContex = new ViewModel(); 
} 

話,我看不出有什麼問題。添加對您的控件的引用並使用它。

+0

因此可以說我的控件由一個文本(搜索字符串)框和一個列表框組成。該控件的VM會將2個集合公開爲屬性 - 1.項目總數列表,以及2.與當前搜索字符串匹配的項目列表。它還會顯示2個屬性:1.對於選定的項目,2.對於搜索字符串。控制的主要數據上下文是它自己的內部虛擬機,我可以按照上面的建議來做,問題是如何在視圖上公開'中間'屬性,以便這些'中間'屬性可以綁定到父視圖上的道具。 – 2010-12-14 12:29:14

+1

將'intermediate'屬性作爲控件(View類)的依賴項屬性(DP),並在父控件中將它們用作任何其他使用DP的控件。 – Arseny 2010-12-14 14:59:39

0

您可以在您的XAML中將您的ViewModel創建爲StaticResource。將DataContext設置爲ViewModel的問題在於,您無法使用該屬性,因此無法再使用您在其中使用該控件的窗口或頁面中的DataContext。

在XAML中聲明你的視圖模型:

<myNS:MyViewModel x:Key="ViewModel /> 

參考您的視圖模型的XAML中:

<TextBlock Text="{Binding Source={StaticResource ViewModel}, Path=TextToBind}" /> 

在後面的代碼,你可以訪問和快速初始化,我通常做一個屬性容易參考我的觀點模型。

private MyViewModel viewModel 
{ 
    get { return this.Resources["ViewModel"] as MyViewModel; } 
} 
相關問題