4

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;
    }
}
4

2 に答える 2

7

View は ViewModel について知っている必要があり、その逆ではないことを忘れないでください。

したがって、あなたの場合、コードを ViewModel に入れてビューを作成することは最善の方法ではありません。

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

于 2009-06-25T14:56:44.167 に答える
0

XAML コントロールまたは Window を使用する場合 (MVVM を使用する場合)、LayoutRoot (既定では Grid) は public です。あなたの例では、View に単純なクラスのみを使用しているため、何が起こっているのかわかりにくいです。

また、私はCameronの意見に賛成です.ViewやModelViewもDataContextの割り当てを扱うべきではありません. さまざまな方法 (DataTemplate、依存性注入、特別なビルダー クラス、プレーン コード) で実行できますが、通常はアプリケーション レベルで発生します。

于 2009-06-25T18:35:24.687 に答える