MVVM でコードをレイアウトする方法について少し混乱しています。対応する VM クラスを持つ UserControl がある場合、他のコントロールはどのように UserControl を使用する必要がありますか?
コンシューマーは VM に直接バインドする必要がありますか、それとも、UserControl の DependencyProperties として実際に使用したいこれらのプロパティのサブセットのみを複製する必要がありますか?
さらに言えば、UserControl の VM を UserControl のコード ビハインドに挿入する必要がありますか、それともこの UserControl を使用するコントロールの VM にそれを依存関係として含め、代わりに UserControl にバインドする必要がありますか?
明確にするために、UserControl に ListBox があり、MVVM で既に実装されている Window でそれを使用するとします。しかし、UserControl VM と対応するバインディングの実装について混乱しています。
理想的な解決策は、UserControl の依存関係プロパティを介して ListBox の SelectedItems を公開し、UserControl を使用する Window をこれらにバインドすることだと思います。
または、ウィンドウの VM は VM への参照をプロパティとして持つ必要がありますか?代わりに、それを挿入してそのプロパティに直接バインドする必要がありますか?
依存関係プロパティは UserControls でのみ定義する必要がありますか、それとも VM で定義できますか?
Window の XAML 内から、Window がバインドされると考えています。
{Binding ElementName=myUserControl, Path=SelectedItems}
また
{Binding Path=MyViewModel.SelectedItems}
後者はViewが別のVMについて知っている必要があるため、前者を介して行う方が理にかなっているようです?