C#では、ViewModelのViewにDataContextを設定するにはどうすればよいですか?
-
20-08-2019 - |
質問
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;
}
}
他のヒント
XAMLコントロールまたはウィンドウを使用する場合(MVVMを使用する場合に該当するはずです)、LayoutRoot(デフォルトではグリッド)はパブリックです。この例では、Viewに単純なクラスのみを使用しているため、何が起こっているのかわかりません。
また、私はキャメロンの意見を再確認します-ViewやModelViewもDataContextの割り当てを処理すべきではありません。さまざまな方法(DataTemplate、依存性注入、特別なビルダークラス、プレーンコード)で実行できますが、通常はアプリケーションレベルで実行されます。
所属していません StackOverflow