Как добавить несколько привязок к одному и тому же свойству зависимости в WPF? - PullRequest
3 голосов
/ 24 марта 2012

Еще один вопрос WPF для всех вас.

У меня есть пользовательский элемент управления, который содержит текстовое поле и кнопку. Кнопка открывает диалоговое окно «Выбор папки»; когда пользователь выбирает папку, текстовое поле должно заполняться путем, выбранным пользователем. Это отлично работает.

Внутри пользовательского элемента управления у меня есть свойство зависимостей с именем Path. Когда пользователь делает свой выбор, путь обновляется, и текстовое поле, связанное с ним, также обновляется. Это прекрасно работает.

Теперь родительский View также должен знать, что это за значение Path. Что делать отсюда?

Я бы предположил, что мы должны добавить свойство в модель представления родителя с именем Path. Достаточно просто - тогда с чем мы это связываем? Свойство зависимости Path пользовательского элемента управления? Может ли это быть связано как с моделью представления родительского элемента, так и с текстовым полем пользовательского элемента управления одновременно?

Я попытался добавить атрибуты пользовательских элементов управления безуспешно:

<v:MyControl Path="{Binding ViewModels:MyViewModel.Path}" ... />

Нет ошибок, просто не обновлялась модель вида. Если такой подход возможен, я могу опубликовать больше кода.

enter image description here

Ответы [ 2 ]

4 голосов
/ 24 марта 2012

Свойство может быть целью только одной привязки, но оно может быть источником (т. Е. Откуда значение «берется») столько привязок, сколько вы хотите ... Так что да, вы можете связать свойство объекта родительское представление свойства Path UserControl.

3 голосов
/ 24 марта 2012

Свойства зависимости могут быть источником нескольких привязок, да. Говоря исключительно о представлении, я мог бы иметь мастер-слайдер с пятью текстовыми полями, привязанными к его значению, и это бы прекрасно работало.

Однако, поскольку вы живете в MVVM, вероятно, более разумно использовать свойства уведомления об изменении модели представления в качестве Единственного источника истины для этого экрана. Пользовательский элемент управления записывает в это свойство, а родительское представление читает его, просто так.

Практическое правило: если более одного компонента уровня представления требует доступа к свойству, свяжите их обоих с моделью представления, а не друг с другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...