2011-08-28 88 views
0

我正在創建一個使用WPF,MVVM和LINQ to SQL的應用程序。對於Calculation類型的對象,我有一組註釋。因此,我創建了一個名爲vmCalculation的ViewModel類。我的問題是,當我嘗試向此對象添加註釋並提交更改時,「註釋」未提交到數據庫。在vmNotes vmCalculationSubmitChanges不「提交」在LINQ to SQL

內容

public class vmCalculation : vmBase 
{ 
    Calculation calc; 

    public ObservableCollection<Note> Notes { get; private set; } 

    public vmCalculation(Calculation calc) 
    { 
     this.calc = calc; 
     Notes = new ObservableCollection<Note>(); 
     foreach (var n in calc.Notes) Notes.Add(n); 
    } 

    public void AddNote() 
    { 
     Notes.Add(new Note 
     { 
      NoteText = "New note", 
      NoteType = 1 
     }); 
    } 

    internal void Save() 
    { 
     foreach (var n in Notes.Where(n => n.NoteId == 0)) 
      calc.Notes.Add(n); 
    } 
} 

方法(視圖模型爲 「NoteWindow」)

public void SaveChanges() 
    { 
     CurrentCalc.Save(); 
     DC.SubmitChanges(); 
    } 

CurrentCalc是獲取一個屬性/設置一個vmCalculation我在數據綁定使用(綁定一個DataGrid到CurrentCalc.Notes)。

當我在CurrentCalc上運行AddNote()時,視圖用「New note」-note更新得很好。但是,當我運行SaveChanges()時,筆記不會寫入數據庫。

對這個問題有什麼想法?

這個問題的一個可能的原因可能是,我不初始化vmNotes中的DataContext(DC)。我從另一個ViewModel獲取DataContext,這樣我就不會銷燬MVVM結構。

+0

計算是你的DataContext? – Magnus

+0

我的LINQ to SQL DataContext(DC)在vmNotes有權訪問的ViewModel vmMain中定義。計算是筆記所屬的對象。 –

回答

0

想到我的問題可能的解決方案。

我更新了vmNotes類的SaveChanges()方法。反正不需要

以上代碼:

public void SaveChanges() 
    { 
     var newNotes = currentCalc.Notes.Where(n => n.NoteId == 0); 
     DC.Notes.InsertAllOnSubmit(newNotes); 
     DC.SubmitChanges(); 
    } 
} 

UPDATE 03/09/2011。

我發現我有我的DataModel類的多個(和靜態)實例。

我刪掉了其中一些,現在我的原代碼工作得很好!

2

在提交之前,您必須將新實體添加到datacontext中。 例如:

DC.Notes.InsertOnSubmit(NewNote); 
DC.SubmitChanges(); 
+0

我已經想到了。但是它不會破壞MVVM架構嗎?我的意思是,vmCalculation不能訪問「DC」。我想我已經嘗試過這個,但遇到了一個錯誤。沒有計算就不能存在筆記,因此不能直接在DC.Notes中添加筆記。不過我會再試一次。 –

相關問題