Prism ViewLocator:如何修复“你的观点必须实现IView”

时间:2015-08-19 14:48:32

标签: c# wpf xaml mvvm prism

我正在启动一个WPF应用程序。我使用Prism及其ViewLocator

这意味着当我有一个必须绑定ViewModel的视图时,我要在其上指示mvvm:ViewModelLocator.AutoWireViewModel="True"并使其实现IView接口,我在后面的代码中做了。

在我的小测试应用程序中,每件事都运行正常,我得到了我的ViewModel,它被设置为我的View的DataContext。

问题在于我正在使用mvvm:ViewModelLocator.AutoWireViewModel="True"的每个地方,我在“错误列表”中收到此错误:

“您的观点必须实施IView”

根据我的理解,问题是xaml编辑器似乎没有检查我的代码是否实现了这个接口。

那么如何避免这个错误?

3 个答案:

答案 0 :(得分:4)

事实上,刚刚发布的Prism 6无需使用IView,因此您不再拥有此消息:)

答案 1 :(得分:2)

在XAML中找到View Model时,XAML Editor会显示一条错误消息。你可以在后面的代码中完成工作:

public MainWindow() {
  InitializeComponent();
  ViewModelLocationProvider.AutoWireViewModelChanged(this);
}

然后没有显示错误消息。

答案 2 :(得分:2)

如果你不想升级到Prism 6,这就是解决方案。

source code of the ViewModelLocator class并在AutoWireViewModelChanged方法中删除此行:

 // throw new Exception("Your views must implement IView");

将此类的命名空间更改为命名空间:

// namespace Microsoft.Practices.Prism.Mvvm
namespace MyNamespace 

在XAML中使用此属性而不是Prism中的属性:

<Page 
   xmlns:my="using:MyNamespace"
   my:ViewModelLocator.AutoWireViewModel="True">