2012-07-02 191 views
1

我已成功將控件綁定到頁面上的屬性。我綁定的屬性返回一個類。綁定的作品,但如果我將屬性設置爲類的新實例UI不更新。WPF - 數據綁定問題

任何人都可以指出正確的方向來解決這個問題,我試圖實現INotifyPropertyChanged,但這是行不通的。

的代碼如下..

XAML - 非常基本的只是想一個標籤綁定在一分鐘的屬性。

<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

發表您的視圖模型的代碼和相應的XAML ... –

+0

你或許應該發表您的INotifyPropertyChanged的實施,因爲你需要,爲了這個工作。當你的setter改變時,你需要觸發PropertyChanged事件。你在做那個嗎? –

+0

代碼和您發佈的XAML之間沒有任何關聯。什麼是測試?如果屬性更改,則需要INotifyPropertyChanged更新UI。 – evanb

回答

1

雖然我的方法使用泛型和表達式,所以我可以強烈地鍵入我的屬性更改,但概念是相同的。在我使用表達式的地方,你使用了一個字符串。如果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

正確; OP已經有這個部分。但也許我應該更新我的答案,以顯示完整的東西...... –