2014-03-06 39 views
0

我有一個填充了「筆記」的datagrid,當單擊一個筆記時,我想讓richtextbox顯示note.comments。但綁定不起作用。將一個字符串綁定到一個richtextbox

public NoteDTO SelectedNote {get; set;} 
public string stringNotes {get; set;} 

public void OpenNote() 
{ 
    stringNotes = SelectedNote.Comments; 
} 



<DataGrid x:Name="NoteGrid" cal:Message.Attach="[Event MouseDoubleClick] = [Action OpenNote()]" ItemsSource="{Binding Notes}" SelectedItem="{Binding SelectedNote}" 


<toolkit:RichTextBox Text="{Binding stringNotes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

如果我可能會得到幫助。

回答

2

主要問題是您綁定到沒有更改通知概念的屬性;你沒有執行INotifyPropertyChanged。話雖這麼說,爲什麼不RichTextBox的直接綁定到物業關閉的NoteDTO

<toolkit:RichTextBox Text="{Binding SelectedNote.Comments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> 

另一種選擇是手動複製意見SelectedNotestringNotes之間,然後實現INotifyPropertyChanged,但這並不理想,除非您希望在將其傳播到NoteDTO對象之前擁有中間屬性。

編輯:

我注意到,您的SelectedNote財產將永遠不會通知它改變了用戶界面,這將阻止的綁定工作。請嘗試如下所示:

public class MyClass : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(string propertyName) 
    { 
     if(this.PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    private string selectedNote; 
    public string SelectedNote 
    { 
     get { return this.selectedNote; } 
     set 
     { 
      if (this.selectedNote == value) 
       return; 

      this.selectedNote = value; 
      this.OnPropertyChanged("SelectedNote"); 
     } 
    } 
} 
+0

您的方法總是有意義的。我將其更改爲SelectedNote.Comments並且它仍然不填充。 – Master

+0

@ user3276954看到我最新的編輯,在我所有關於實現該接口的討論中,我暗示你的財產需要實現它。 – Matt

+0

很好的答案,它實際上填充我的richtextbox。但現在它出現在NoteDTO而不是文本中。我試過' Master

相關問題