Имеется главная MainViewModel и MyUserControl(у него своя ViewModel).
public class MainViewModel
{
public 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'а, а вручную, вы можете правильно инициализировать их и связать нужным вам образом.
Комментариев нет:
Отправить комментарий