刷新SaveChanges上的所有上下文
本文关键字:上下文 SaveChanges 刷新 | 更新日期: 2023-09-27 18:01:20
我有一个WPF应用程序,我有两个窗口。一个用于列出对象(例如Books),另一个用于编辑对象(例如Book)。我为每个窗口创建了一个新的EF上下文。
现在我想知道,是否有一种方法可以在列表窗口中检测到在编辑窗口中调用SaveChanges
后已编辑上下文?
我现在做的是在我的列表窗口对象上有一个公共Update
方法,我在SaveChanges
被调用后从编辑窗口调用,并在该函数中调用上下文刷新。然而,这是不可扩展的,因为我需要跟踪所有依赖于Book信息的窗口(例如,如果我添加了书架列表,我也需要确保更新该列表)。
关于如何以更模块化的方式解决这个问题有什么建议吗?
注:有趣的是,当我在2年前第一次编写这段代码时,我似乎已经有了如何改进这一点的想法,因为我为自己做了一个评论:"TODO:通过在ArTresorEntities中添加事件来解决这个问题"。但是我不记得我是什么意思了
使用MVMM Light可以发送Message。您的列表窗口注册接收消息,然后通知它有关更改。
您可以通过在您的模型类上实现INotifyPropertyChanged,然后将值绑定到您的标签/接口控件来做到这一点。
下面是一个示例模型类:
public class Data : INotifyPropertyChanged
{
int random;
public int Random
{
get { return random; }
set { random = value; NotifyPropertyChanged("Random"); }
}
protected void NotifyPropertyChanged(String propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
这就是实现INotifyPropertyChanged所需的全部内容。注意,你必须在属性的set方法中调用NotifyPropertyChanged,否则这将不起作用。
On the UI side, you would do something like this:
<Grid>
<Label Content="{Binding Random, UpdateSourceTrigger=PropertyChanged}" />
<Button Width="100" Height="40" Content="Randomize" Click="Button_Click" />
</Grid>
最后,xaml:
的代码隐藏 public Data data;
public MainWindow()
{
InitializeComponent();
data = new Data();
this.DataContext = data;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
data.Random = new Random().Next(1000);
}
被分配的DataContext只是一个例子,但它将这个特定的类绑定到这个窗口的DataContext,允许我执行{Binding Random}并知道我在谈论哪个属性以及在哪个类中。您可以通过几种方式来实现这一点,并在整个视图中拆分它。
我还添加了一个按钮,生成一个随机数,并将其设置在我的模型上的random属性中。如果运行此代码,则每次单击按钮时它都会更新标签。