Можно ли привязать свойство другого пользовательского элемента управления?

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

Можно ли связать свойства разных пользовательских элементов управления?

Я думал об этом:

<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. Потому что у обоих одинаковая модель просмотра. **

Надеюсь, вы понимаете. Если нет, просто дайте мне знать в комментариях.

**

Другие вопросы по тегам