我有一个WPF应用程序,我有两个窗口。一个是列出对象(例如图书),另一个是编辑一个对象(例如图书)的表单。我为每个窗口创建了一个新的EF上下文。
现在我想知道,我在列表窗口中检测到我在编辑窗口中调用SaveChanges
后编辑了上下文的方法?
我目前所做的是在我的列表窗口对象上使用公开Update
方法,我在{{1>之后从编辑窗口调用该方法调用并在该函数中调用上下文刷新。然而,这是不可扩展的,因为我需要跟踪依赖于Book信息的所有窗口(例如,如果我添加Shelves列表,我将需要确保也更新那个)。
关于如何以更模块化的方式解决这个问题的任何建议?
P.S。 有趣的是,我似乎已经知道如何改进这个2年前,当我第一次编写这段代码时,我为自己做了评论:" TODO:通过在ArTresorEntities中进行事件来解决这个问题&#34 ;。但我不记得我的意思。
答案 0 :(得分:1)
使用 MVMM Light ,您可以发送消息。您的列表窗口注册接收消息,后者通知它有关更改。看看here。
答案 1 :(得分:0)
您可以通过在模型类上实现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属性中。如果您运行此代码,则每次单击按钮时都会更新标签。