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