2012-02-19 15 views
1

私は、ユーザーコントロールにバインドするために使用されるviewModelを持っています。ユーザーコントロールは基本的にAdRotatorです。 AdRotatorの機能の1つは、同じ画面上の複数の位置で使用できることです。これらの複数のadRotatorsには、別々の広告セットが表示されます。シングルビューモデルでは、さまざまな場所にあるadRotatorsに対して4つの観測可能なコレクションが公開されます。私の問題は、ユーザーコントロールが 'ドラッグアンドドロップ'を使用しているからです。私は、どのobservablecollection(4のどの)がadRotatorにバインドすべきかを判断させる識別メソッドを探しています。私にこれのためのアプローチが何であるか教えてください。UserControlへのデータバインディング

私はユーザーコントロールの名前を取得し、名前に応じてコレクションをバインドすると良い方法でしょうか?

答えて

0

私はあなたのビューモデルの詳細を知らないので、一般的な言葉で表現された1つのアプローチを提供します。

ユーザーコントロール内のバインディングが探しているVm1、Vm2などのプロパティを持つすべてのバリエーションである4つの子ビューモデルを持つビューモデルがあるとします。これらはあなたの広告コレクション。ユーザーコントロールの各インスタンスのDataContextを子ビューモデルのそれぞれにバインドできます。

<my:SampleUserControl DataContext="{Binding Path=Vm1}" /> 
    <my:SampleUserControl DataContext="{Binding Path=Vm2}" /> 
    <my:SampleUserControl DataContext="{Binding Path=Vm3}" /> 
    <my:SampleUserControl DataContext="{Binding Path=Vm4}" /> 

このように、ユーザーコントロールの各インスタンスは異なるデータにバインドして表示できます。

0

ViewModelsは論理アプリケーションの一部です。再利用可能なコントロールのために、私はコードの背後にある通常のUserControlを作成します。このコントロールはプロパティとイベントを介してAPIを公開することができ、あなたのケースでは "広告"のリストを取得する依存プロパティが公開されます。

このようにすると、それぞれのAdRotatorコントロールが異なるコレクションにバインドされているビューですべてを配置できます。このように、ロジックは1つの場所、つまりViewModelにのみ置かれ、再利用可能なUIは専用のコントロールに置かれます。

View + ViewModelsは再利用のための再利用可能なコントロール(DRY:自分自身を繰り返さない)の論理区切り(単一責任原則、SRP)です。使用しているコントロールの種類を特定することは非常に重要です。通常の再利用可能なコントロールにViewModelを含めないでください。

関連する問題