Как выполнить двухстороннюю привязку данных в WPF?

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

У меня есть a ListView с набором объектов в нем. Когда пользователь выбирает новый объект, a TextBox в приложении изменит его текст для отображения некоторого свойства выбранного пункта.

Но когда пользователь изменяет текст в текстовом поле, я хочу ListView объект, который будет обновлен сразу также. Есть ли какой-либо "двухсторонний обязательный" волшебный способ WPF выполнить это?

12
задан Vadim Kotov 8 August 2017 в 13:43
поделиться

3 ответа

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

Кроме того, когда вы говорите, что хотите, чтобы элемент ListBox обновлялся немедленно, вы имеете в виду, что хотите, чтобы он изменялся при вводе текста в TextBox . По умолчанию свойство TextBox.Text обновляет свой источник при потере фокуса, но вы можете изменить это, установив привязку UpdateSourceTrigger на PropertyChanged :

{Binding Source={...}, Path=Whatever, UpdateSourceTrigger=PropertyChanged}
11
ответ дан 2 December 2019 в 03:18
поделиться

Каков тип элементов в ListView? Чтобы получить двустороннюю привязку, необходимо реализовать INotifyPropertyChanged ...

Это может помочь изменить свойство события WPF?

1
ответ дан 2 December 2019 в 03:18
поделиться

Ответ Марка показывает, как выполнить то, что вы хотите, но вы также спросили в более общем плане о том, «как выполнить [двустороннюю привязку] и что на самом деле это означает. "

Односторонняя привязка означает, что цель привязки (например, элемент управления) будет отображать данные из источника привязки (например, бизнес-объекта) и будет обновлять себя по мере изменения бизнес-объекта, но это изменяется в элементе управления не будет распространяться обратно на бизнес-объект. Например. если Person.Name изменится с «bob» на «kate», TextBlock.Text, привязанный к Name, также изменится с «bob» на «kate».

Двусторонняя привязка просто означает, что не только изменения бизнес-объекта отражаются в пользовательском интерфейсе, но и изменения, сделанные пользователем в пользовательском интерфейсе, также распространяются обратно на бизнес-объект. Итак, теперь, когда пользователь редактирует TextBox.Текст, привязанный к имени, скажем, при изменении «kate» на «edmund», WPF также установит для свойства Person.Name значение «edmund».

Для этого просто установите Mode = TwoWay в объявлении привязки. Некоторые свойства по умолчанию связываются двусторонне: например, TextBox.Text по умолчанию связывает TwoWay, поэтому для кода Марка не требуется объявление Mode. Кроме того, как отмечает Марк, по умолчанию WPF передает изменения обратно в бизнес-объект только тогда, когда элемент управления теряет фокус. Если у вас есть два элемента пользовательского интерфейса, привязанных к одному и тому же свойству, это может означать, что они не синхронизированы, и в этом случае вы можете использовать UpdateSourceTrigger, чтобы заставить WPF распространяться при изменении свойства.

MSDN подробно описывает это с помощью нескольких хороших четких диаграмм: см. Обзор привязки данных в WPF SDK.

34
ответ дан 2 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: