设计器问题+实体框架(WPF MVVM)
本文关键字:WPF MVVM 框架 实体 问题 | 更新日期: 2023-09-27 17:58:27
背景,这是一个使用实体框架的WPF项目,当运行良好时,它只是设计者给出以下错误。
未处理的异常指定的命名连接在配置中找不到,不打算与EntityClient提供程序一起使用,或者无效。
我已经处理了UI的连接字符串,但这仍然是一个问题
我有以下绑定
DataContext="{Binding Source={x:Static ViewModel:ViewModelLocator.MainWindowViewModelStatic}}"
它与初始化的类有关
new MainWindowViewModel(new UIDataProvider());
其具有以下
private readonly IUIDataProvider _dataProvider;
private IList<Customer> _customers;
public IList<Customer> Customers
{
get
{
if (_customers == null)
{
GetCustomers();
}
return _customers;
}
}
public MainWindowViewModel(IUIDataProvider dataProvider)
{
_dataProvider = dataProvider;
Tools = new ObservableCollection<ToolViewModel>();
Tools.Add(new AToolViewModel());
Tools.Add(new BToolViewModel());
}
private void GetCustomers()
{
_customers = _dataProvider.GetCustomers();
}
设计器实际上是在设计时实例化代码的。您的代码在实例化时正试图访问您的数据,因此实体框架代码在错误的位置查找您的连接字符串。解决方案是在设计模式下不这样做。
最简单的方法是检查DesignerProperties。GetIsInDesignMode。这并不是真正的MVVM,因为您必须在视图模型中检查这一点,并将UI代码注入到视图模型中。
解决方案是什么?你可以捏住鼻子做这件事(快速而肮脏),创建一个可注入的接口,从你的ViewModel中抽象出这个检查,默认情况下,ViewModel是一个检查DependencyProperty的实现,或者你捕捉到异常并优雅地接受它。