Страницы

Поиск по вопросам

четверг, 30 мая 2019 г.

Как прикрепить ViewModel к UserControl?

Как прикрепить 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(); } }

Комментариев нет:

Отправить комментарий