将更改从 LINQ 还原为 SQL 后 WPF 更新 UI
WPF Update UI after Revert Changes From LINQ to SQL
我阅读了这个问题,但不幸的是,在还原更改后没有找到更新 ui 的任何解决方案。
如何拒绝 Linq to SQL 的 DataContext 中的所有更改?
我的所有属性都派生自 INotifyPropertyChanged。
var changeSet = dataContext.GetChangeSet();
if (changeSet != null)
{
var updates = changeSet.Updates.ToArray();
dataContext.Refresh(RefreshMode.OverwriteCurrentValues, changeSet.Updates);
foreach (var o in updates)
{
INotifyPropertyChanged entity = (INotifyPropertyChanged)o;
// What i have to do to force them trigger PropertyChanged event ???
}
}
首先我向我所有的 Linq2SQL 添加一个方法 类:
public partial class Setting
{
public void SendPropertyChangedFromOutside(string propName)
{
SendPropertyChanged(propName);
}
}
public partial class User
{
public void SendPropertyChangedFromOutside(string propName)
{
SendPropertyChanged(propName);
}
}
然后调用 UndoDBChanges 方法:
public static void UndoDBChanges(System.Data.Linq.DataContext dataContext) {
var changeSet = dataContext.GetChangeSet();
if (changeSet != null)
{
var updates = changeSet.Updates.ToArray();
dataContext.Refresh(RefreshMode.OverwriteCurrentValues, changeSet.Updates);
foreach (var o in updates)
{
try
{
Type t = o.GetType();
dynamic obj = Convert.ChangeType(o, t);
foreach (System.Reflection.PropertyInfo prop in t.GetProperties())
{
obj.SendPropertyChangedFromOutside(prop.Name);
}
}
catch
{ }
}
}}
我阅读了这个问题,但不幸的是,在还原更改后没有找到更新 ui 的任何解决方案。
如何拒绝 Linq to SQL 的 DataContext 中的所有更改?
我的所有属性都派生自 INotifyPropertyChanged。
var changeSet = dataContext.GetChangeSet();
if (changeSet != null)
{
var updates = changeSet.Updates.ToArray();
dataContext.Refresh(RefreshMode.OverwriteCurrentValues, changeSet.Updates);
foreach (var o in updates)
{
INotifyPropertyChanged entity = (INotifyPropertyChanged)o;
// What i have to do to force them trigger PropertyChanged event ???
}
}
首先我向我所有的 Linq2SQL 添加一个方法 类:
public partial class Setting
{
public void SendPropertyChangedFromOutside(string propName)
{
SendPropertyChanged(propName);
}
}
public partial class User
{
public void SendPropertyChangedFromOutside(string propName)
{
SendPropertyChanged(propName);
}
}
然后调用 UndoDBChanges 方法:
public static void UndoDBChanges(System.Data.Linq.DataContext dataContext) {
var changeSet = dataContext.GetChangeSet();
if (changeSet != null)
{
var updates = changeSet.Updates.ToArray();
dataContext.Refresh(RefreshMode.OverwriteCurrentValues, changeSet.Updates);
foreach (var o in updates)
{
try
{
Type t = o.GetType();
dynamic obj = Convert.ChangeType(o, t);
foreach (System.Reflection.PropertyInfo prop in t.GetProperties())
{
obj.SendPropertyChangedFromOutside(prop.Name);
}
}
catch
{ }
}
}}