2011-08-24 108 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找不到一個... –