我有一个填充了“notes”的数据网格,当点击一个笔记时,我希望richtextbox显示note.comments。但Bindings无效。
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}"/>
如果我可以得到帮助,请
答案 0 :(得分:2)
主要问题是你绑定了一个没有变更通知概念的属性;你没有实施INotifyPropertyChanged
。话虽如此,为什么不直接将RichTextBox绑定到NoteDTO
之外的属性:
<toolkit:RichTextBox Text="{Binding SelectedNote.Comments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
另一个选项是在SelectedNote
和stringNotes
之间手动复制评论,然后实施INotifyPropertyChanged
,但这并不理想,除非您希望在传播它们之前拥有中间属性到NoteDTO
对象。
编辑:
我注意到您的SelectedNote
属性永远不会通知UI它已更改,这将阻止绑定工作。尝试以下内容:
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");
}
}
}