首先抱歉我的英语。我是新的C#,wpf和这类事。 我正在使用实体框架,我正在使用ObservableCollection绑定数据网格。 我需要获取单元格的旧值并将其与新值进行比较。 在数据库中,实体具有旧值,因为我没有保存更改。 我的问题是,当我尝试执行find(context.Find(reference.Id);)时,返回find的元素具有网格的新值。
我的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 :(得分:1)
如何在您的文件夹属性的setter中触发事件,并将旧名称传递给它。或者你可以在你的setter中调用一个方法来执行你需要做的事情。我想我的观点是,我相信在不关心用户界面的情况下处理会更容易。
答案 1 :(得分: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);
}
这样您就可以获得数据库项目和新项目。 你可以比较并做你想做的事。