Можно ли привязать свойство другого пользовательского элемента управления?
У меня два пользовательских элемента управления. У второго есть дата-сетка. Я хочу, чтобы первый пользовательский элемент управления получал уведомление при изменении выбранного элемента в сетке данных второго пользовательского элемента управления.
Можно ли связать свойства разных пользовательских элементов управления?
Я думал об этом:
<local:MyFirstUserControl MyPorperty={Binding ElementName MySecondUserControl, path=DataGrid.Selecteditem}/>
<local:MyFirstUserControl Name="MySecondUserControl"/>
Спасибо.
3 ответа
Вы можете использовать мессенджер для отправки сообщений между моделями представления (например, DevExpress.Mvvm или MvvmLight)
https://docs.devexpress.com/WPF/17474/mvvm-framework/messenger
Вы можете определять собственные события и подписываться на них. В вашем случае первый пользовательский элемент управления будет подписываться на какое-то событие (скажем, событие X). Второй пользовательский элемент управления будет публиковать событие X с соответствующим объектом (выбранный элемент в вашем случае). Первый пользовательский элемент управления будет получать уведомление каждый раз, когда выбранный элемент изменяется, получать данные и выполнять обработку.
Вы можете управлять взаимодействием и потоком данных между двумя пользовательскими элементами управления на странице, которая их использует.
Поэтому, когда выбранный элемент изменяется в сетке, инициируйте событие. Родительская страница может обработать это соответствующим образом, в этом случае путем вызова общедоступного метода для второго пользовательского элемента управления.
Вы можете использовать Messenger для отправки и получения сообщений между ViewModel. Это поможет вам уведомить после регистрации во второй ViewModel. Я поделился ссылкой, которая поможет вам это понять.
ИЛИ ЖЕ
Вы можете привязать одну и ту же ViewModel к UserControl. OnSelectedItem в DataGrid (UserControl1). вы можете привязать свойство, которое уведомляет UserControl2. Потому что у обоих одинаковая модель просмотра. **
Надеюсь, вы понимаете. Если нет, просто дайте мне знать в комментариях.
**