设计器问题+实体框架(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();
    }

设计器问题+实体框架(WPF MVVM)

设计器实际上是在设计时实例化代码的。您的代码在实例化时正试图访问您的数据,因此实体框架代码在错误的位置查找您的连接字符串。解决方案是在设计模式下不这样做。

最简单的方法是检查DesignerProperties。GetIsInDesignMode。这并不是真正的MVVM,因为您必须在视图模型中检查这一点,并将UI代码注入到视图模型中。

解决方案是什么?你可以捏住鼻子做这件事(快速而肮脏),创建一个可注入的接口,从你的ViewModel中抽象出这个检查,默认情况下,ViewModel是一个检查DependencyProperty的实现,或者你捕捉到异常并优雅地接受它。