25

View と ViewModel がどのように接続されているか誰か説明できますか? ViewModel を参照する View の xaml または xaml.cs も、ViewModel.cs ファイル内の View を参照するものも見つかりませんが、それらは何らかの形で接続されており、ViewModel から View へのメンバーのバインドが機能しています。 .

また、それぞれのコンストラクターには、View の InitializeComponent と ViewModel の基本コンストラクター (View の宣言/定義なし) のみがあります。

ありがとう!

4

4 に答える 4

36

ここにはさまざまなオプションがあります。

View を ViewModel のインスタンスに設定するDataContext必要があります。ここには多くのオプションがあります:

  • これは xaml で直接実行できます (View は ViewModel を直接インスタンス化するだけです)。
  • これは、ビューのコンストラクター ( this.DataContext = new MyViewModel();)で実行できます。
  • これは、DataTemplate
  • 「調整」クラスはこれらを一緒に配線できます (つまり、別の「プレゼンター」クラスは両方を構築してDataContext適切に設定できます) 。

最も一般的なのは、View に xaml で VM を定義させる (View-first) か、ViewModel 中心の観点からすべてを基にして、バインドされた VM に基づいて WPF が自動的に View を作成するようにすることです (ViewModel-最初)。

前者のアプローチは、 MVVM Lightなどの多くのツールキットで使用されているものです。後者のアプローチは、私がMVVM ブログ シリーズで使用したものであり、他のいくつかのツールキットでも使用されています。

于 2012-06-21T15:40:33.720 に答える
5

ビューをビューモデルに接続するための「クリーンな」方法は...

ビューを作成するときは、ビューごとに、その DataSource をそのビュー モデルに設定します。

例えば

public class App
{
    private void OnAppStart()
    {
        var model = new MainModel();
        var vm = new MainVM();
        var view = new MainWindow();

        vm.Model = model;
        view.DataSource = vm;

        view.Show();
    }
}

表示しているモデルが変更されたら、VM を更新します。

public class MainVM
{
    private void OnSelectedModelItemChanged()
    {
        this.SelectedItem = new ItemVM();
        this.SelectedItem.Model = this.SelectedModelItem;
    }
}

また、データ テンプレートを使用して、ビューが各 VM の正しいサブ ビューを選択するようにします。

于 2012-06-21T16:00:52.997 に答える
2

ビューには、xaml のビュー モデル クラスのオブジェクトが含まれています。

InitializeComponent 関数は、ページ上のすべてのコントロールを作成し、スタイルなどを設定します。

于 2012-06-21T15:39:48.080 に答える