2011-07-27 30 views
9

嗨,我正在構建一個wpf應用程序,其中一個屏幕將由用於執行各種應用程序的不同用戶控件組成。如何在WPF MVVM中使用用戶控件

我想知道在MVVM中這樣做的正確過程嗎?每個用戶控件應該有自己的視圖模型,還是應該綁定到主視圖模型屬性?

請提出一個好方法。謝謝,

回答

5

當我使用UserControl時,我通過DependencyProperties傳遞數據。我的UserControls沒有ViewModels。 UserControls只處理傳遞的數據的一種非常特殊的方式。

但是,如果我有查看包含一些子視圖,我優先給每個子視圖有一個自己的模型。這些模型將通過MainView的ViewModel的屬性進行綁定。

一些示例:

的UserControl1,後面的代碼:

public partial class UserControl1 : UserControl 
{ 
    public MyClass MyProperty 
    { 
     get { return (MyClass)GetValue(MyPropertyProperty); } 
     set { SetValue(MyPropertyProperty, value); } 
    } 

    public static readonly DependencyProperty MyPropertyProperty = 
     DependencyProperty.Register("MyProperty", typeof(MyClass), typeof(UserControl1), new UIPropertyMetadata(null)); 


    public UserControl1() 
    { 
     InitializeComponent(); 
    } 
} 

public class MyClass 
{ 
    public int MyProperty { get; set; } 
} 

並在視圖中使用,XAML:

<Window x:Class="Sandbox.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:Sandbox="clr-namespace:Sandbox"> 
    <Grid> 
    <Sandbox:UserControl1 MyProperty="{Binding MyOtherPropertyOfTypeMyClassInMyViewModel, Mode=TwoWay}" /> 
    </Grid> 

希望這有助於

+0

嗨我從來沒有使用過DependencyProperties。您可以給我一個鏈接或簡要解釋一下用戶控件應該如何使用依賴屬性。我應該爲一個userControl創建一個類型,然後將其綁定到視圖內的各種屬性? – ganeshran

+1

我加了個簡單的例子 – WaltiD

+0

謝謝WaltiD我會試試這個方法。我也可以將它綁定到用戶定義的類型? – ganeshran

1

好問題 - 但我不認爲有一個簡單的答案。

這取決於數據的形狀。如果不同的用戶控件是對同一數據的不同視圖,那麼沒有理由不能共享相同的ViewModel ...這是MVVM的驅動力之一 - 您可以將相同的ViewModel賦給不同的視圖以顯示相同的數據以不同的方式。

但是,如果您的ViewModel開始真的膨脹並且沒有太多重疊,請將其分解爲更小的ViewModels。也許那麼你的主ViewModel變得更像一個ViewModel管理器,並帶有一系列ViewModel,以適當地分發給各種用戶控件?

+0

你是一個互動蜇解決方案。我會盡力實施它。我嘗試使用多個viewmodels,但無法讓他們相互溝通。你認爲每個用戶控件的datacontext應該對應於一個自定義類型,它是主視圖模型的一個屬性。根據MVVM,這是否正確? – ganeshran

+0

是的 - 聽起來像一個合理的方法 – IanR

相關問題