c# - 设计师问题 + Entity Framework (WPF MVVM)

标签 c# wpf entity-framework mvvm

背景,这是一个使用 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/

相关文章:

c# - WPF:无法获取自定义附加属性作为触发器属性

c# - MahApps Metro 主题 - 始终在 WPF 应用程序中的所有其他窗口前面显示对话框窗口

c# - 关于使用 Dispatcher Priority 和 Binding 的建议

entity-framework - Entity Framework 中货币的数据类型

c# - 将 Gridview 绑定(bind)到 Treeview 节点单击

c# - 如何在 Monotouch 中绑定(bind) NSObject<UIGestureRecognizerDelegate>?

c# - 有没有办法防止我们的应用程序被分析或注入(inject)? (C#)

wpf - 文本框到数字绑定(bind)

c# - Entity Framework 1对0或1关系配置

Oracle 的 Beta EF 提供程序 - 为什么它不允许我将 Decimal 映射到 "number"字段