2011-07-27 10 views
9

こんにちは私は、画面がさまざまなアプリケーションを実行するためのさまざまなユーザーコントロールで構成されているwpfアプリケーションを構築しています。WPF MVVMでユーザーコントロールを使用する方法

MVVMでこれを行うための正しいプロセスを知りたかったですか?各ユーザーコントロールに独自のビューモデルが必要か、それともメインViewモデルプロパティにバインドする必要がありますか?

良いアプローチを提案してください。ありがとう、

答えて

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を一度も使用していません。あなたに私にリンクを与えてください、またはユーザーコントロールがどのように依存プロパティを使うべきかを簡単に説明できますか? 1つのuserControlの型を作成し、それをビュー内のさまざまなプロパティにバインドする必要がありますか? – ganeshran

+1

私は単純な例を追加しました – WaltiD

+0

ありがとうWaltiD私はこのアプローチを試みます。それをユーザー定義のTypeにバインドすることはできますか? – ganeshran

1

良い質問 - しかし、私は一直線の答えがあるとは思わない。

データの形状によって大きく異なります。異なるユーザーコントロールが同じデータ上の異なるビューである場合、同じViewModelを共有できない理由はありません。これはMVVMの原動力の1つです。同じViewModelに同じViewModelを与えて、データをさまざまな方法で収集します。

しかし、あなたのViewModelが本当に膨らみ始め、重なりがあまりない場合は、小さなViewModelsに分解してください。多分あなたの主なViewModelは、ViewModelのコレクションを持つViewModelのマネージャーになり、必要に応じてさまざまなユーザーコントロールに渡します。

+0

あなたを助けますインテルスティング溶液。私はそれを実装しようとします。私は複数のビューモデルを使用しようとしましたが、お互いに通信することができませんでした。各ユーザーコントロールのdatacontextは、メインのビューモデルのプロパティであるカスタムタイプに対応する必要があると思いますか?それはMVVMによれば正しいでしょうか? – ganeshran

+0

ええ、妥当なアプローチのように聞こえます。 – IanR

関連する問題