Страницы

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

понедельник, 15 июля 2019 г.

UserControlVIewModel работа со свойствами UserControl

Имеется главная MainViewModel и MyUserControl(у него своя ViewModel).
public class MainViewModel { public ObservableCollection StringList; public MainViewModel() { StringList = new ObservableCollection(); } }
Допустим необходимо передать коллекцию строк из MainViewModel в UserControl.

как получить коллекцию StringList во ViewModel-и MyUserControl-а?
public class MyUserControlVM { //здесь работать с Items который приходит от MyUserControl }
UPD1
Но вопрос ещё вот в чём: зачем другому контролу видеть те же Items? Какой объект этот контрол визуализирует? Если это тот же объект, то и VM та же. Если это другой объект, почему у двух объектов общая часть?
Отвечаю на вопрос, да это другой объект.
Может быть такое что несколько UserControl-ов принимают одни и те же данные и обрабатывают их по своему в своих VM, затем выводят результат во View

Добавим еще один MyUserControl2(со своей VM), который также принимает коллекцию StringList из MainVM. Каждый контрол по-своему обрабатывает принимаемую коллекцию, и выводит во View результат обработки.
Первый UserControl


Второй UserControl


В итоге для того чтобы работал UserControl ему нужно передать некую информацию из MainVM, затем работать с ней во VM-контрола. Собственно как обращаться к этой некой информации во VM контрола? Или как получить данные от DependecyProperty(определенные в контроле) во VM контрола.


Ответ

Проблема вот в чём: вы задаёте DataContext прямо внутри контрола! Так делать не стоит, ведь при этом он у вас будет не связан с внешним миром. Вы должны устанавливать DataContext снаружи, как-то так:

где SubVM — свойство типа MyUserControlVM в MainViewModel
Если несколько контролов должны иметь доступ к общей коллекции, положите ссылку на одну и ту же коллекцию в их VM. Если вы создаёте подчинённые VM не из XAML'а, а вручную, вы можете правильно инициализировать их и связать нужным вам образом.

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

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