WPF привязка к сущности не обновляется - PullRequest
3 голосов
/ 17 июня 2011

У меня есть некоторая привязка, которая привязывается к объекту, определенному структурой сущности.Некоторые из моих привязок обновляются нормально, а другие нет.Лучший способ объяснить это на примере, у меня есть что-то вроде этого:

<TextBlock Text="{Binding Path=FirstName}"/>
<TextBlock Text="{Binding Path=LastName}"/>
<TextBlock Text="{Binding Path=Role.Name}"/>

В этом случае текст в первых 2 текстовых блоках обновляется нормально, как только изменяется свойство объекта.В случае последнего ничего не происходит.Я понимаю, почему это происходит.Инфраструктура сущностей имеет свойство RoleID, которое обновляется и вызывает событие изменения свойства для RoleID, но на самом деле оно не вызывает такого события для роли.Таким образом, связывание не знает, что ничего изменилось.Возможные решения, которые я вижу, - это заставить объектную структуру вызывать событие change свойства для Role при изменении RoleID или получить привязку для поиска изменений в RoleID вместо Role.Я не уверен, как это сделать.

Заранее спасибо за любые ответы, Майкл

Ответы [ 2 ]

3 голосов
/ 20 июня 2011

Я нашел решение.Как сказал Джерри, объект сущности должен вызвать событие изменения свойства.Проблема заключается в том, что структура сущностей вызывает событие только для RoleID, но не для роли.Я пытался вызвать собственное событие, вызывая ReportPropertyChanged, но это приводило к ошибке, говоря, что свойство не существует.Решение состоит в том, чтобы вызвать OnPropertyChanged ("Role") вместо ReportPropertyChanged.Это можно сделать частичным способом, чтобы при изменении RoleID событие также вызывалось для роли.Как то так

partial void OnRoleIDChanged()
{
    OnPropertyChanged("Role");
}
1 голос
/ 17 июня 2011

Две вещи, которые вы должны знать:

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

  2. Если вы не добавите UpdateSourceTrigger = PropertyChanged в свою привязку, то изменения пользовательского интерфейса не будут отражены в базовых данных (пока вы не покинете поле).

Надеюсь, это поможет.

...