0

我有几个不同的 wpf 窗口,例如 sales.xaml、buy.xaml。

两个窗口都使用相同的 EF 代码优先模型 sales.cs。

我为 sales.xaml 中的销售模型添加了一些价值,当 sales.xaml 关闭时,如何从 sales.xaml 中检索到 buy.xaml 中的相同模型。

如果我没有将模型属性设置为静态,数据将会丢失。

谢谢你。

4

2 回答 2

0

一种选择是将模型的实例声明为 StaticResource,然后在每个页面上访问它,并根据需要将实例设置为 DataContext。

<Application.Resources>
 <Example:ViewModel x:Key="VM"/>
</Application.Resources>

...

 <UserControl.DataContext>
  <Binding Source="{StaticResource VM}"/>
 </UserControl.DataContext>

如果您在每个页面上执行此操作,则任何更改都应保留到全局存储在应用程序的 ResourceDictionary 中的实例。

于 2012-10-02T03:16:01.547 回答
0

在任何情况下都不要使您的数据上下文静态化。不要使用单例。不要让它成为全球性的。

当您需要进行数据操作时,始终实例化一个新的数据上下文。操作完成后,调用 SaveChanges 以便下次需要时返回数据。

原因是数据上下文被设计为短暂的。如果您将上下文设为静态,则它在应用程序的整个生命周期内都不会被销毁。它将继续增长对象缓存,直到最终耗尽内存。

数据上下文没有中止或回滚功能。它们被设计为在逻辑操作结束时被丢弃。假设您将实体添加到数据上下文,然后 SaveChanges.. 如果出现错误,则无法删除您刚刚添加的数据。唯一受支持的方法是破坏上下文。

于 2012-10-02T06:20:51.793 回答