Привязка данных Silverlight к свойствам объекта - PullRequest
0 голосов
/ 18 января 2011

У меня есть Silverlight ChildWindow. Когда я нажимаю на ссылку, она открывает это дочернее окно и отображает некоторые данные из моей ViewModel. Проблема в том, что это не обновляется, когда обновляются данные в ViewModel.

Образец из всплывающего окна:

<TextBox Text="{Binding Path=AgentExceptionDetail.Action, Mode=TwoWay}" />

ViewModel:

private AgentExceptionDetail _agentExceptionDetail;
public AgentExceptionDetail AgentExceptionDetail
{
  get { return _agentExceptionDetail; }
  set
  {
    if (value != _agentExceptionDetail)
    {
      RaisePropertyChanged("AgentExceptionDetail");
      _agentExceptionDetail = value;
    }
  }
}

Этот объект AgentExceptionDetail заполняется посредством вызова RIA-Services. Этот вызов успешен, и данные возвращаются в порядке. На самом деле привязка действует, как режим Mode = OneTime, а не OneWay, поскольку при закрытии и повторном открытии всплывающего окна отображаются данные, но при первом открытии всплывающего окна AgentExceptionDetail = null заполняется при возврате вызова.

Это связано со мной, вызывая событие измененного свойства для «AgentExceptionDetail», когда привязка фактически ищет «AgentExceptionDetail.Action»? Если так, то есть ли способ обойти это?

1 Ответ

2 голосов
/ 18 января 2011

Это должно работать так, как вам нужно в вашем сценарии, если я правильно понимаю ваше описание. Однако здесь я вижу серьезную проблему:

    if (value != _agentExceptionDetail)
    {
      RaisePropertyChanged("AgentExceptionDetail");
      _agentExceptionDetail = value;
    }

Вы отправляете уведомление об изменении, прежде чем что-либо изменить! Обратный порядок действий для исправления этой ошибки.

    if (value != _agentExceptionDetail)
    {
      _agentExceptionDetail = value;
      RaisePropertyChanged("AgentExceptionDetail");
    }
...