我试图使用IUIVisualizerService
(Catel.MVVM v4.0.0)来显示基于VM的对话框。
我的代码如下所示:
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 )。
顺便说一句,我可以通过显式注册关联来克服这一点:
var serviceLocator = Catel.IoC.ServiceLocator.Default;
var uiService = serviceLocator.ResolveType<Catel.Services.IUIVisualizerService>();
uiService.Register<ConfigurationViewModel, ConfigurationView>();
但我更愿意让事情“开门见山”
发布于 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);
https://stackoverflow.com/questions/27216029
复制相似问题