【问题标题】:Prism ViewLocator : How to fix "Your views must implement IView"Prism ViewLocator:如何修复“您的视图必须实现 IView”
【发布时间】:2015-11-12 22:46:04
【问题描述】:

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

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

在我的小型测试应用程序中,一切正常,我得到了我的 ViewModel,它被设置为我的 View 的 DataContext。

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

"你的视图必须实现 IView"

据我了解,问题在于 xaml 编辑器似乎没有检查我的类背后的代码是否实现了此接口。

那么如何避免这个错误呢?

【问题讨论】:

    标签: c# wpf xaml mvvm prism


    【解决方案1】:

    事实上,刚刚发布的 Prism 6 不再需要IView,所以你不再有这个消息了:)

    【讨论】:

    • Prism 6 中没有 IView,因此不再需要它。
    【解决方案2】:

    当您在 XAML 中找到视图模型时,XAML 编辑器会给出错误消息。您可以改为在后面的代码中完成这项工作:

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

    然后不会显示错误消息。

    【讨论】:

    • 谢谢,但我们非常希望能够在设计时,在 XAML 中查看 AutoWired 是什么用户控件
    • 我发现这是一个非常巧妙的解决方案,可以解决该死的 XAML 编辑器,因为各种原因总是会产生错误的错误。
    【解决方案3】:

    如果您不想升级到 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">
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-01
      • 2019-10-23
      • 2020-11-14
      • 2019-12-08
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 2021-01-07
      相关资源
      最近更新 更多