Designer问题+实体框架(WPF MVVM)

时间:2014-04-14 16:00:34

标签: c# wpf entity-framework mvvm

背景,这是一个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();
    }

1 个答案:

答案 0 :(得分:2)

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

天真的方法是检查DesignerProperties.GetIsInDesignMode。这不是真正的MVVM,因为您必须在视图模型中检查它,并将UI代码注入视图模型。

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