- Мой текстовый редактор WPF TextBox использует экземпляр класса (называемый «SelectedDocument») в качестве своего документа. Этот класс реализует INOtifyPropertyChanged.
- Экземпляр SelectedDocument имеет еще один объект типа «CellContent» (называемый «Описание»), открытый через свойство.
- CellContent также реализует INotifyPropertyChanged.
- Класс CellContent имеет свойство string ("TextValue"), к которому можно привязать.
Я привязываю свойство TextBox Text к этому свойству TextValue. Как так:WPF Databinding - Getter/Setter для промежуточного объекта, который не попадает
<TextBox DataContext="{Binding SelectedDocument}" Text="{Binding Path=Description.TextValue" />
Нет проблем с привязки данных - это работает в обоих направлениях. Но для этого связывания с работы, WPF предположительно должен ударить по Описание объекта недвижимости в SelectedDocument каждый раз, чтобы извлечь объект CellContent:
public CellContent Description
{ get; set; }
(. Это свойство является более сложным в моем коде) Затем WPF может достигнуть внутри фактический объект CellContent и get/set TextValue.
Проблема: Свойство Описание никогда не попадает. Похоже, что WPF обходит его и создал прямое подключение к свойству TextValue внутри объекта Description. Я хочу, чтобы каждый раз попадал в getter и seters Description, чтобы я мог выполнить там какой-то дополнительный код.
Как это сделать?
Без хорошего [mcve] невозможно сделать какое-либо уверенное заявление о том, что происходит. Но совершенно естественно, что WPF не выдает значение свойства «Описание», если это значение действительно не изменится. Пока все, что изменилось, это 'Description.TextValue', будет восстановлено свойство' TextValue'. Учитывая это, вам нужно задать другой вопрос: как решить любую более широкую задачу, которую вы имеете, привело вас к этому ошибочному дизайну, где вы ожидали, что значение свойства будет восстановлено, даже если нет никаких причин для этого. –
Поскольку мы не знаем, что такое более широкая цель, мы фактически не можем вам помочь. Пока что все, что мы можем сделать, это сказать вам, что структура работает так, как ожидалось, и что это ваше ожидание ошибочно. –
В базовом дизайне на самом деле не так много магии: Описание используется как свойство строки, и я использовал для этого прямое связывание. В этом свойстве Description был добавлен дополнительный код (каждый раз, когда данные возвращаются, документ помечен как Dirty). Теперь каждый фрагмент данных больше, чем просто строка, поэтому имеет смысл инкапсулировать все это в новый класс и получить доступ к этому классу через старое свойство. За исключением того, что он больше не попадает. – Drakestar