コンストラクターを介して割り当てられた、WPF アプリケーションに関連付けられた MainViewModel を持つ MainView があります。
アプリ >起動 uri > MainWindow.xaml
public MainWindow()
{
InitializeComponent();
var viewModel = new MainViewModel();
DataContext = viewModel;
}
My MainView には、MainView でクリックされたボタンに基づいて非表示および表示されるネストされたビューまたは子ビューが最大 4 つ保持されます。そのため、MainView の各ボタンに割り当てられたコマンド バインディングを介して更新されるバインディングを介して可視性プロパティを切り替えます。
ネストされた各ビューには関連付けられたビューモデルがありません。子ビューで見つかったすべてのバインディングは、MainViewModel で情報を見つけます。そのため、バインディング システムはアプリの UI ツリーを調べて、親の「MainView」に ViewModel が関連付けられていることを確認します。
したがって、全体として「ONE」-> ViewModel があります。これは問題なく動作しているように見えますが、予想どおり、この VM は大きくなり、リファクタリングが必要です。文脈上、保持すべきではない情報を保持します。しかし、これは証明概念の適用です。だから私はそれをシンプルに保ち、それが実行可能であることを確認することにしました.
問題:
空のビュー モデルに空のビューを割り当てようとすると、出力ウィンドウにバインド エラーが表示され、予想どおり、奇妙で壊れた動作に気付きました。これは意味がありません...ネストされたビューコントロールで見つかったバインディングを処理する方法をWPFに知らせる、より明確で簡潔な方法はありますか? 上記のように、各ビューのコンストラクターが対応する VM を自分自身に割り当てた場合、これは論理的に理にかなっているため、機能するはずだと思いました。残念ながら、MainView のすべてのボタンは、対応するビューをオンにして他のビューを非表示にするように指定されている場合、ViewModel が関連付けられていると機能しなくなります。一部のボタンでは機能し、他のボタンでは機能しませんか? これは本当に奇妙ですか?