C#では、ViewModelのViewにDataContextを設定するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1044365

質問

I <!> quot; m MVVMで頭をラップしようとしています。多くのことを理解していますが、 DataContextの設定という1つの側面を把握するのが困難です。

特定のオブジェクトでビューを表示したい。ユーザーは何を表示するかを決定できないため、コードでビューを作成する必要があります。次に、ビューのDataContextをオブジェクト(バインド用)に設定します。私はこのためにコードをビューに入れないようにしていますが、View.LayoutRoot.DataContextはパブリックではありません。

不足しているものは何ですか?

これを回避しようとしています:

public class View
{
    public View(object dataContext)
    {
        InitializeComponent();
        LayoutRoot.DataContext = dataContext;  
    }
}

次のようなものを使用:

public class ViewModel
{
    ...

    public UIElement GetView()
    {
        UIElement *element = new View();
        element.LayoutRoot.DataContext = element;
        return element;
    }
}
役に立ちましたか?

解決

ViewがViewModelについて認識していることを忘れないでください。逆ではありません。

そのため、ビューを作成するためにViewModelにコードを配置するのは最善の方法ではありません。

MVVMの

Josh Smithの記事にはセクションでビューをViewModelに適用します。彼は、WPFのDataTemplatesを使用してXAMLでビューを選択することをお勧めします。

他のヒント

XAMLコントロールまたはウィンドウを使用する場合(MVVMを使用する場合に該当するはずです)、LayoutRoot(デフォルトではグリッド)はパブリックです。この例では、Viewに単純なクラスのみを使用しているため、何が起こっているのかわかりません。

また、私はキャメロンの意見を再確認します-ViewやModelViewもDataContextの割り当てを処理すべきではありません。さまざまな方法(DataTemplate、依存性注入、特別なビルダークラス、プレーンコード)で実行できますが、通常はアプリケーションレベルで実行されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top