Как прикрепить ViewModel к UserControl? В случае с window всегда делал так:
new MainWindow()
{
DataContext = new MainVm()
};
Если делать так для UserControl то компилятор ругается. Как нужно действовать в данной ситуации?
P.S. Для общей картины обьясню к какому эффекту я стремлюсь: есть главное окно, и в зависимости от нажатий пользователся должны отображатся разные, никак не связанные между собой данные. Поэтому для каждых из этих данных я хочу создать отдельные UserControl и Vm, и по надобности просто подменять один UserControl на другой. Если у меня неправильный подход, поправьте меня.
Ответ
Контрол не должен устанавливать себе сам DataContext. DataContext должен устанавливать родительский элемент. Делайте как-то так:
То есть: нужные VM для частей, которые представляются в виде контролов, должны быть в MainVM как свойства. (Таким образом, кстати, все VM смогут общаться через центральную VM.)
Надеюсь, вы поняли идею.
Кстати, и главное окно тоже не должно создавать себе VM. Обычно делается так:
public partial class App : Application
{
MainVM mainVM = new MainVM();
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
new MainWindow() { DataContext = mainVM }.Show();
}
}
Комментариев нет:
Отправить комментарий