1

Silverlight/MVVM は初めてです。MVVM Light の例をいくつか試してみました。

私のシナリオでは、パノラマアイテムごとにパノラマページを作成し、顧客のアイテムリストであるユーザーコントロールを表示したいと考えています。

私は usercontrol(view)、viewmodel、および WCF サービス モデルを構築し、単一のパノラマ アイテムでうまく機能します (最初の顧客のみを使用します)。また、MIX10のデモにあるMVVM LightのLocatorを使って、Expression Blendの設計時のデータを作ることができます。

ビューモデルは顧客 ID のパラメーターを受け取り、この ID に基づいて WCF とデータを交換します。また、顧客リストも WCF から取得されます。そのため、ロケーターの静的コンストラクターで実際にビューモデルを作成することはできません。

ビューモデルが Locator を呼び出して実行時に構築されている場合、データ バインディングを作成するにはどうすればよいですか?

私が考える唯一の方法は、ユーザーコントロールのコンストラクターでビューモデルオブジェクトを作成し、それをデータコンテキストにすることです。

より良い解決策はありますか?

4

1 に答える 1

0

XAML で同じ宣言型モデルを保持する場合は、ロケーターに CurrentCustomerViewModel プロパティを配置し、ページに移動する前にプロパティを適切なビューモデルに設定できます。

個人的には、そのようなページの場合、私は通常、ビューモデル ファクトリ メソッドをロケーターに配置し (キャッシュできるようにするなど)、OnNavigatedTo メソッドから呼び出します。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    string id = NavigationContext.QueryString["customerID"];
    vm = ViewModelLocator.GetCustomerViewModel(id);
    DataContext = vm;
    base.OnNavigatedTo(e);
}

次に、Blend のサンプル データ機能を設計時のデータに使用します。この方法は、ページをスタート画面にピン留めするのにも役立ちます。これは、アプリへのエントリ ポイントになるため、「CurrentCustomerVM」プロパティを設定する機会が必ずしも得られるとは限らないためです。

于 2012-08-04T01:21:47.707 に答える