2011-08-24 106 views
0

我想从使用MVVMWPF MVVM databing到DataGrid中没有更新

在WPF的DataGrid对象显示的笔记列表

XAML:

<DataGrid 
     x:Name="NoteGrid" 
     ItemsSource="{Binding NoteObj.Notes}" 
     SelectedItem="{Binding CurrentNote}" 
     AutoGenerateColumns="False" 
     CanUserAddRows="False" 
     CellEditEnding="DataGrid_CellEditEnding"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Note" Binding="{Binding NoteText}" /> 
      <DataGridTextColumn Header="Type" Binding="{Binding Type.Name}" /> 
     </DataGrid.Columns> 
    </DataGrid> 

NoteObj.Notes的返回值是EntitySet的。

视图模型:

private NoteObject noteObj; 
public NoteObject NoteObj 
{ 
    get { return noteObj; } 
    set { noteObj = value; OnPropertyChanged("NoteObj"); } 
} 

public void AddNote() 
{ 
    var note = new Note 
    { 
     NoteText = "Note text", 
     NoteType = 1 
    }; 

    NoteObj.Notes.Add(note); 
    DC.SubmitChanges(); 
    OnPropertyChanged("NoteObj"); 
} 

当NoteObj设置充满了音符,但AddNote法不wotk DataGrid中! 新笔记已添加到数据库,但DataGrid永远不会更新。

这是一个问题eith EntitySet或我在XAML中丢失了什么?

+0

尝试添加[presentationtracesources](http://msdn.microsoft.com/zh-cn/library/system.diagnostics.presentationtracesources.tracelevel.aspx)并查看它是否在输出中提供了一些提示。 – Vegar

+0

如果我将TraceLevel设置为“高”或“中”,则程序在SubmitChanges(行未找到或某物)上崩溃。没有输出! –

+0

这可能表明EF有问题,而不是绑定? – Vegar

回答

2

这只有在NoteObj.Notes执行INotifyCollectionChanged时才有效。您可以通过使用ObservableCollection<T>类来实现此目的。

+0

您是否说我需要在ViewModel中实现ObservableCollection ,并在NoteObj被设置时“填充”这个? –

+1

“Pure”MVVM指出您的实体与您的UI无关,因此您需要创建一个包含“ObservableCollection Notes”属性的'NoteObjectViewModel'。因为如果你不这样做,你会遇到像这样的问题。 –

+2

不知何故,我无法得到这个权利。你有链接到文章/教程,显示这样的实现?用LINQ to SQL找不到一个... –