2012-07-02 7 views
1

Я успешно связал элемент управления с собственностью на моей странице. Свойство, которое я связываю, возвращает класс. Связывание работает, но если я устанавливаю свойство как новый экземпляр класса, пользовательский интерфейс не обновляется.WPF - Databinding Issue

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

Кодекс выглядит следующим образом ..

XAML - Очень Basic просто пытается связать метку к свойству в минуту.

<Grid> 
     <Label Content="{Binding StudentName}"></Label> 
     <Button Width="100" Height="75" Click="Button_Click" ></Button> 
</Grid> 

C#

this.DataContext = parentWindow.SelectedStudent; 

C# примечание родительского окно родительского окна реализует INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged; 

public UCStudent SelectedStudent 
{ 
      get 
      { 
       if (_selectedStudent == null) 
       { 
        _selectedStudent = new UCStudent(); 
       } 

       return _selectedStudent; 
      } 

      set 
      { 
       if (_selectedStudent != value) 
       { 
        _selectedStudent = value; 
        OnPropertyChanged("SelectedStudent"); 
       } 
      } 
} 

protected void OnPropertyChanged(string name) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(name)); 
     } 
    } 

Вопрос в том, когда я установить свойство SelectedStudent быть новым выбранным студентом связывание не Обновить.

+1

разместить код вашего ViewModel и соответствующий код XAML ... –

+0

Вы, вероятно, следует размещать вашу реализацию INotifyPropertyChanged, потому что вам нужно, что для того, чтобы это работало. Когда ваш сеттер изменяется, вам нужно запустить событие PropertyChanged. Вы это делаете? –

+0

Нет никакой связи между кодом и отправленным вами XAML. Что такое тест? Для изменения пользовательского интерфейса INotifyPropertyChanged требуется изменить свойство. – evanb

ответ

1

В то время как мой подход использует generics и выражение, поэтому я могу сильно ввести изменения свойств, концепция одинаков. Где я использую выражение, вы используете строку. Вы захотите вернуться, если свойство PropertyChanged равно null. В противном случае запустите событие без, сначала объявив нового обработчика событий.

public event PropertyChangedEventHandler PropertyChanged; 

    protected void NotifyPropertyChanged<T>(Expression<Func<T>> expression) 
    { 
     if (this.PropertyChanged == null) { return; } 

     string propertyName = GetPropertyName(expression); 

     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

Этот подход позволяет модели представления строго вводить уведомление.

this.NotifyPropertyChanged(() => this.SelectedApplication); 
+0

Если это поможет изменить мой метод, чтобы показать строковую версию, дайте мне знать. Надеюсь, поможет. –

+0

Не забывайте, что самая важная часть, то есть класс должен реализовать интерфейс 'INotifyPropertyChanged', чтобы все это работало. –

+0

Право; ОП уже имеет эту часть. Но, может быть, я должен обновить свой ответ, чтобы показать всю вещь ... –