2008-12-07 51 views
3

我在Microsoft Sql CE中創建了一個表,用於存放一些數據。我已經通過SqlMetal生成了一個ORM,並且我將數據源拉入了我的WPF項目。如何使用Ok/Cancel按鈕爲數據綁定WPF對話框設計備份數據類型?

我想創建可用於通過ORM生成的類編輯在表中的記錄一個簡單的WPF的形​​式。我希望這個表單支持典型的OK/Cancel語義。我已經創建了我認爲是典型的時尚的形式,在各個字段上使用TwoWay數據綁定與ORM中的對象實例進行綁定。例如,假設在具有財產「TASKNAME」的ORM的對象,我已經包含在我的WPF的形​​式如下:

<Label Grid.Column="0" Grid.Row="0" > 
    Name: 
</Label> 
<TextBox Name="txtName" Grid.Column="1" Grid.Row="0" 
     Text="{Binding TaskName, Mode=TwoWay}" AcceptsReturn="False" 
     MaxLines="1" /> 

這與一個DataContext分配代碼組合:

var newRow = new OrmGeneratedClass(); 
// Populate default values on newRow, e.g.  
detailWindow.DataContext = newRow; 
detailWindow.ShowDialog(); 

可以合理良好地創建一個新行。通過表單進行的所有更改都立即反映在底層的OrmGeneratedClass中。問題是,如果例如OrmGeneratedClass被先前保存的值填充,則不會立即支持取消更改。

什麼是好的設計對於這種情況,還是我設計它錯之前,我到這個地步?我是WPF和Sql Server數據源/ ORM集成方面的新手。 (這是一個個人項目,我使用學習這兩種技術。)

我有一對夫婦的想法,並把他們的答案中

回答

7

保羅Stovell有大約爲IEditableObject接口,使您可以進行數據綁定,並允許應用/恢復行爲創建適配器輝煌的文章。

http://www.paulstovell.com/blog/runtime-ui-binding-behavior-ieditableobject-adapter

適配器環繞你的ORM的對象並自動緩存更改,以便您可以應用更改,或恢復到原來的。

+0

輝煌!這看起來像它正在尋找我正在尋找的東西。謝謝! – 2008-12-07 04:43:23

1

一個可行的辦法是尋找從取消結果該對話框以及使用ORM對象的主鍵在每次用戶取消以驗證該對象包含其在數據庫中具有的值時從數據庫檢索數據。這假設該值的最近確認值已經存儲在數據庫中。 (可能是一個合理的假設在程序這樣簡單會)。

它可能看起來像這樣(非編譯)代碼:

var existingRow = GetExistingRow(someConditionOrWhatever); 
detailWindow.DataContext = existingRow; 
if(!detailWindow.ShowDialog()) 
{ 
    existingRow = GetExistingRow(someConditionOrWhatever); 
} 

我不知道我是否喜歡廿四儘管如此,跳到數據庫。

+0

http://groups.google.com.au/group/wpf-disciples/web/wpf-and-xaml-coding-guidelines包括一些有用的準則,包括我正在執行的DataContext分配的更好的技術在問題中。 – 2009-01-26 14:24:21