2014-05-23 38 views
0

首先對我的英語抱歉。林新的C#,WPF和這種事情。 即時通訊使用實體框架,我用ObservableCollection綁定數據網格。 我需要獲取單元格的舊值並將其與新值進行比較。 在數據庫中,實體具有舊值,因爲我沒有保存更改。 我的問題是,當我嘗試做一個find(context.Find(reference.Id);)時,返回查找的元素具有網格的新值。在datagrid中獲取單元格的前一個值

我的XAML有:

<DataGrid x:Name="datagrid" PreviewKeyDown="dataGrid_PreviewKeyDown" AutoGenerateColumns ="False" ItemsSource="{Binding Path=References, ElementName=referenceWindow, Mode=TwoWay}" 

我的.cs是這樣的:

ObservableCollection<Reference> References = new ObservableCollection<Reference> References(context.References); 

我如何獲得舊值?

感謝

+0

顯示一些代碼。 –

+0

我剛編輯顯示一些代碼 – user3284892

+0

您正在使用Mode = TwoWay,所以您實際上正在更新您的datacontext –

回答

0

正如Kik我會說創建一個方法,當屬性或屬性發生改變時被觸發。 當我們除了數據綁定之外沒有看到你在做什麼的時候,給出一個例子有點難。 我個人會跳過雙向模式,併爲整個對象創建一個方法。

可以使用RowEditEnding這樣的:

<DataGrid x:Name="DataGrid" RowEditEnding="DataGrid_OnRowEditEnding" AutoGenerateColumns="False" Margin="5"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Name" Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}"/> 
      <DataGridTextColumn Header="Age" Binding="{Binding Age, UpdateSourceTrigger=PropertyChanged}"/> 
     </DataGrid.Columns> 

    </DataGrid> 

然後在這樣的代碼:

private void DataGrid_OnRowEditEnding(object sender, DataGridRowEditEndingEventArgs e) 
    { 
     var datag = (DataGrid) sender; 
     var p = (Person) datag.SelectedValue; 
     var p1 = (Person) e.Row.Item; 
     Debug.WriteLine(p.Name + ", " + p.Age); 
     Debug.WriteLine(p1.Name + ", "+ p1.Age); 
    } 

這樣,你將有你的數據庫項目和新項目。 你可以比較和做你想做的。

1

如何做的是得到你的文件夾屬性設置者觸發的事件,並通過舊名稱到它。或者你可以在你的setter中調用一個方法來完成你需要的任何事情。我想我的觀點是,我相信在不關心用戶界面的情況下處理起來會更容易。

相關問題