我有几个不同的wpf窗口,例如sales.xaml,buy.xaml。
两个窗口都使用相同的EF代码第一个型号sales.cs。
我在sales.xaml中为销售模型添加了一些价值,当sales.xaml关闭时,如何从sales.xaml中检索buy.xaml中的相同模型。
如果我没有将模型属性设置为静态,则数据将丢失。
谢谢。
答案 0 :(得分:0)
一种选择是将模型的实例声明为StaticResource,然后在每个页面上访问它,并根据需要将实例设置为DataContext。
<Application.Resources>
<Example:ViewModel x:Key="VM"/>
</Application.Resources>
...
<UserControl.DataContext>
<Binding Source="{StaticResource VM}"/>
</UserControl.DataContext>
如果您在每个页面上执行此操作,那么任何更改都应该保留到全局存储在Application的ResourceDictionary中的实例。
答案 1 :(得分:0)
在任何情况下都不要使您的数据上下文保持静态。不要使用单身人士。不要让它全球化。
当您需要执行数据操作时,始终实例化新数据上下文。当操作完全时,您调用SaveChanges以便下次需要时,将返回数据。
原因是数据上下文被设计为短暂的。如果您将上下文设置为静态,则在应用程序的生命周期内永远不会销毁它。它将继续增长对象缓存,直到它最终耗尽内存。
数据上下文没有中止或回滚功能。它们被设计为在逻辑操作结束时被丢弃。假设您在数据上下文中添加了一个实体,然后是SaveChanges ..如果出现错误,则无法删除刚刚添加的数据。唯一受支持的方法是破坏上下文。