2014-09-19 3 views
0

У меня есть представление, что я вызову View1, у которого есть вложенный элемент управления пользователями, который я назову View2. Мое основное приложение создает и показывает View1, который, в свою очередь, создает View2, поскольку он является пользовательским элементом управления View1. Оба View1 и View2 имеют свои собственные режимы просмотра. Мне нужно получить значение из viewmodel View1 в viewmodel View2.Настройка свойств дочерней viewmodel от родителя

View2 предназначен для полностью автономного управления с его собственной функциональностью, которая может использоваться повторно в любом другом виде, но для этого требуется часть информации из любого вида, в котором она содержится. В данном случае это будет be View1.

Моя первая попытка была создать свойство зависимости от View2 поэтому он может быть установлен в View1 так:

<myUserControls:View2 MyProperty="{Binding RelativeSource={RelativeSource Self}, Path=Parent.DataContext.MyProperty}"/> 

Это работает, чтобы установить свойство зависимостей, но это не поможет получить свойство значение в viewmodel View2, где я могу работать с ним.

Я делаю это в Silverlight, если это имеет значение.

Кто-нибудь знает, есть ли способ сделать это?

+0

Связь между виртуальными машинами можно безопасно использовать * Посредник шаблон *, см. [Обсуждение в этом ответе] (http://stackoverflow.com/a/21332502/2998271) – har07

ответ

0

Я бы рекомендовал использовать шаблон «Посредник» или какую-либо связь между режимами просмотра. Я лично использовал легкую передачу сообщений Galavoft MVVM для отличных сделок успеха. Рэйчел также написал довольно хороший блог о навигации: Rachel's MVVM blog

Но я бы попытался уменьшить связь в вашей программе, разрешив обмену сообщениями переключателем контекста данных и обновлением viewmodel, а не созданием свойства зависимостей.

Возможно, у вас есть класс baseviewmodel, который наследует все модели модели и использует полиморфное общее свойство «view model», которое имеет тип baseviewmodel в вашей основной модели. После того, как сообщение было получено для переключения с viewmodel # 1 на viewmodel # 2, вызовите функцию «модель обновления» (которую вы указали в вашей модели baseview и переопределите в своем VM # 2), которая затем будет обрабатывать обновление вашей виртуальной машины №2.

+0

Вы также можете наполнить общий «объект данных» в ваше сообщение, чтобы, когда VM # 1 отправляет сообщение, он также отправляет значение, необходимое для VM # 2. – Stunna

Смежные вопросы