无法添加到数据库

时间:2014-03-11 13:48:52

标签: c# wpf

所以我目前有一个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");
}

1 个答案:

答案 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");
}