首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Catel WindowNotRegisteredException

Catel WindowNotRegisteredException
EN

Stack Overflow用户
提问于 2014-11-30 17:26:17
回答 1查看 253关注 0票数 0

我试图使用IUIVisualizerService (Catel.MVVM v4.0.0)来显示基于VM的对话框。

我的代码如下所示:

代码语言:javascript
运行
复制
private async void ShowConfiguration()
{
    // Get the configuration object
    ApplicationConfiguration conf = //get configuration

    // Create the view model with it
    ConfigurationViewModel vm = new ConfigurationViewModel(conf);

    var serviceLocator = Catel.IoC.ServiceLocator.Default;

    var uiService = serviceLocator.ResolveType<IUIVisualizerService>();

    var res = await uiService.ShowDialog(vm);

    if (res.HasValue && res.Value)
    {
        // save the configuration
    }
}

我的VM全名是:

MyProject.ViewModels.Configuration.ConfigurationViewModel

相应的意见(应该是):

MyProject.Views.Configuration.ConfigurationView

我假设这个默认的命名约定:

AS.Views.VMView

应该执行映射,其中AS = MyProject和VM =Configuration.Configuration.但我得到了WindowNotRegisteredException

没有注册为'MyProject.ViewModels.Configuration.ConfigurationViewModel‘的窗口

我遗漏了什么?我确信相反的情况是有效的(根据视图找到VM )。

顺便说一句,我可以通过显式注册关联来克服这一点:

代码语言:javascript
运行
复制
var serviceLocator = Catel.IoC.ServiceLocator.Default;
var uiService = serviceLocator.ResolveType<Catel.Services.IUIVisualizerService>();
uiService.Register<ConfigurationViewModel, ConfigurationView>();

但我更愿意让事情“开门见山”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-30 19:42:31

默认情况下,不支持您使用的命名空间。您应该使用以下两种名称空间:

MyProject.Configuration.ViewModels.ConfigurationViewModel MyProject.Configuration.Views.ConfigurationView

或者将新的命名约定添加到IViewLocator中:

viewLocator.NamingConventions.Add("MyProject.Views.Configuration.VMView");

或手动注册视图:

viewLocator.Register(typeof(ConfigurationViewModel),型(ConfigurationView);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27216029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档