Обновление привязки данных wpf после обновления объекта - PullRequest
3 голосов
/ 18 января 2009

У меня есть объект в презентере, связанный с представлением. Внутри моего XAMTL у меня есть следующее:

<Label Content="{Binding ElementName=PSV, Path=Presenter.Portfolio.Name}"/>

Теперь, когда элемент управления создан, Портфолио равно нулю, затем я запускаю другой метод, который устанавливает Портфолио. Я реализовал INotifyPropertyChanged, но до сих пор не смог инициировать подключение к привязке.

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

Ответы [ 4 ]

2 голосов
/ 14 декабря 2009

Привязка всегда работает с DataContext, вам нужно будет установить Presenter в локальный DataContext. Например, вы можете сделать это в конструкторе вашего Window или UserControl:

this.DataContext = new Presenter();

Ваша привязка изменится на:

<Label Content="{Binding ElementName=PSV, Path=Portfolio.Name}"/>

Часть Presenter вашего прежнего пути подразумевается в DataContext.

Таким образом DataContext следит за событиями NotifyChanged и будет корректно обновлять представление при изменении значения Portfolio с нуля на значение.

В ответ на заключительную часть вашего вопроса, привязка к свойству объекта недвижимости работает.

1 голос
0 голосов
/ 21 января 2009

Поскольку у вас реализован INotifyPropertyChanged, вы обязательно запускаете событие PropertyChanged в своем установщике Portfolio.Name?

string _name;
public string Name
{
get 
{
   return _name;
}
set
{
   _name = value;
   // Alert the databinding engine about changes to the source value
   OnPropertyChanged("Name");
}

void OnPropertyChanged(string propertyName)
{
   if (PropertyChanged != null)
      PropertyChanged(propertyName);
}

#region INotifyPropertyChanged members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
0 голосов
/ 18 января 2009

Если вы правильно ввели INotifyPropertyChanged, это будет работать просто отлично. Несколько вещей, чтобы попробовать:

  1. Попробуйте установить фиктивное портфолио с фиктивным именем в конструкторе докладчика, чтобы убедиться, что привязка действительно правильная.
  2. Если после # 1 он все еще не работает, поищите ошибки связывания в окне вывода.
  3. Если это сработало после # 1, убедитесь, что у заданного вами портфеля есть имя на момент его создания. Если нет, класс вашего портфеля также должен будет реализовать INotifyPropertyChanged и вызвать событие, когда установлен Name.

Если все это не удалось, опубликуйте свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...