我正在启动一个WPF应用程序。我使用Prism及其ViewLocator
。
这意味着当我有一个必须绑定ViewModel
的视图时,我要在其上指示mvvm:ViewModelLocator.AutoWireViewModel="True"
并使其实现IView
接口,我在后面的代码中做了。
在我的小测试应用程序中,每件事都运行正常,我得到了我的ViewModel,它被设置为我的View的DataContext。
问题在于我正在使用mvvm:ViewModelLocator.AutoWireViewModel="True"
的每个地方,我在“错误列表”中收到此错误:
“您的观点必须实施IView”
根据我的理解,问题是xaml编辑器似乎没有检查我的代码是否实现了这个接口。
那么如何避免这个错误?
答案 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">