所以我目前有一个Datagrid,当选择Datagrid中的注释时,它会填充Textbox字段。那部分完全有效。我想实现一个" AddNewNote Button"我目前的问题是,如果一个项目从未被选中,我会得到一个null引用。如果在按下按钮之前选择了一个项目,它就可以了!但我需要它在两种情况下都能工作。
private NoteDTO selectedNote;
public NoteDTO SelectedNote
{
get { return this.selectedNote; }
set
{
if (this.selectedNote == value)
return;
this.selectedNote = value;
this.OnPropertyChanged("SelectedNote");
}
}
xaml side
<DataGrid ItemsSource="{Binding Notes}" SelectedItem="{Binding SelectedNote}" />
<TextBox Text="{Binding SelectedNote.Subject}" />
<toolkit:RichTextBox Text="{Binding SelectedNote.Comments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
public void AddNewNote()
{
var newNote = new Note();
newNote.Person_Id = PersonId;
newNote.Comments = SelectedNote.Comments;
newNote.Subject = SelectedNote.Subject;
using (var ctx = DB.Get())
{
ctx.Notes.Add(newNote);
ctx.SaveChanges();
}
this.OnPropertyChanged("newNote");
}
答案 0 :(得分:1)
您正在尝试绑定SelectedNote
上的属性,这会导致null
处的异常:
<TextBox Text="{Binding SelectedNote.Subject}" />
<toolkit:RichTextBox Text="{Binding SelectedNote.Comments, ... }" />
您可以在getter / setter中处理此问题,确保SelectedNote
永远不会null
:
get { return this.selectedNote ?? (this.selectedNote = new NoteDTO()); }
set
{
if (this.selectedNote == value)
return;
this.selectedNote = value ?? new NoteDTO(); // make sure it's never `null`
this.OnPropertyChanged("SelectedNote");
}