2010-06-17 5 views
1

Привет У меня есть окно mainView, у которого его dataContext установлен на свой собственный viewModel.WPF Usercontrol взаимодействие с родительским представлением/viewmodel

В этом представленииModel является свойством DateTime, которое, в свою очередь, привязано к datepicker на моем основном представлении с использованием двухсторонней привязки.

<toolkit:DatePicker DateSelected="{Binding mainDateTimeProperty, Mode=TwoWay}" /> 

Все это в порядке. При изменении моего свойства datetime я создаю список, который затем привязан к datagrid в другом месте mainview. Все это прекрасно работает.

Мой вопрос связан с пользовательским элементом управления, который я хочу добавить к основному виду. Я хочу, чтобы этот usercontrol был автономным, поэтому создал его с помощью собственной модели просмотра, но он также нуждается в доступе к mainDateTimeProperty.

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

<uc:MyNewUserControl DateProperty="{Binding mainDateTimeProperty}" /> 

Проблема заключается в том, как есть ли у меня UserControl поддерживать DataContext с его ViewModel и все еще имеет свойство зависимостей, связанное со свойством на главной модели представления?

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

Большое спасибо за любые советы.

ответ

3

Попробуйте

<uc:MyNewUserControl DateProperty="{Binding Parent.DataContext.mainDateTimeProperty, Mode=TwoWay}" /> 

Отредактировано: К сожалению, Previos код неверен. Правильное связывание

<uc:MyNewUserControl DateProperty="{Binding Path=Parent.DataContext.mainDateTimeProperty, RelativeSource={RelativeSource Self}, Mode=TwoWay} /> 
+0

ОК спасибо. Я попробую. Итак, еще одно замечание, вы могли бы сказать, что использование подхода и привязки свойства зависимостей, как это, является правильным способом сделать что-то в этом типе подхода родительского/детского контроля? – obaylis

+0

Почему бы и нет? Если вы хотите, чтобы ваши xaml не отображали привязки, как это, вы можете выставить свойство модели родительского представления с помощью модели детского представления, если модель родительского представления уже имеет агрегированную модель детского представления, а модель дочернего представления имеет ссылку на родителя. Кстати, использование свойства Parent для получения ссылки на родительский вид может быть некорректным в некоторых случаях, например, если ваш дочерний вид не помещает родителя напрямую. Если это так, используйте следующую привязку: {Binding Path = DataContext.mainDateTimeProperty, RelativeSource = {RelativeSource Type = FindAncestor, AncestorType = {x: Тип uc: YourParentViewModelType}}} – STO

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