背景,这是一个使用 Entity Framework 的 WPF 项目,运行时工作正常,只是设计器给出了以下错误。
未处理的异常
指定的命名连接在配置中未找到,不打算与 EntityClient 提供程序一起使用,或者无效。
我已经处理了到 UI 的连接字符串,但这仍然是一个问题
我有以下绑定(bind)
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();
}
最佳答案
设计器实际上是在设计时实例化您的代码。您的代码在实例化时试图访问您的数据,因此 Entity Framework 代码在错误的位置查找您的连接字符串。解决方案是在设计模式下不这样做。
天真的方法是检查DesignerProperties.GetIsInDesignMode .这不是真正的 MVVM,因为您必须在 View 模型中检查它,并将 UI 代码注入(inject)到您的 View 模型中。
解决方案是什么?你可以捏着 Nose 去做(又快又脏),创建一个可注入(inject)接口(interface),从你的 ViewModel 中抽象出这个检查,默认情况下,这是一个检查 DependencyProperty 的实现,或者你捕获异常并优雅地吞下它.
关于c# - 设计师问题 + Entity Framework (WPF MVVM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23064774/