MVVM Light ViewModelLocator在单独的程序集中?设计时模式问题

4

我正在使用带有Ninject的MVVM Light V4。我的ViewModel文件在单独的程序集中。当ViewModelLocator在启动程序集(View文件)中时,它可以正常工作,并且具有Blendability。

我想将ViewModelLocator放置在ViewModel程序集中,但是当我这样做时,我失去了Blendability。之后,它仅在已启动的应用程序中正常工作(而不是在设计时模式中)。

ViewModelLocator:

static ViewModelLocator()
    {
        ServiceLocator.Initialize();

        if (ViewModelBase.IsInDesignModeStatic)
        {
            using (var module = new DesignBindingsModule())
            {
                ServiceLocator.Load(module);
            }
        }
        else
        {
            using (var module = new DefaultBindingsModule())
            {
                ServiceLocator.Load(module);
            }
        }
    }

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
        "CA1822:MarkMembersAsStatic",
        Justification = "This non-static member is needed for data binding purposes.")]
    public IMainWindowViewModel MainWindow
    {
        get
        {
            return ServiceLocator.Get<IMainWindowViewModel>();
        }
    }

是否可以将ViewModelLocator放在单独的程序集中,并在设计时模式下绑定它?


1
当我在与设计师合作时遇到问题时,我可能会做的一件事是抛出异常以查看正在执行的代码。例如,您可能想要查看ServiceLocator.Get<IMainWindowViewModel>()的返回值。可以尝试抛出throw ServiceLocator.Get<IMainWindowViewModel>().ToString()之类的语句。 - Jake Berger
你应该将其作为答案提交并接受或删除。 - Jake Berger
1个回答

0
问题已解决。我的代码中有一个错误。ServiceLocator被初始化了两次,并抛出异常,导致无法正确绑定。奇怪的是它只在设计器中出现,并且设计器没有显示异常。我重构了代码,问题消失了。我将所有ViewModel相关类放在单独的程序集中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接