2015-08-19 1 views
7

Я начинаю приложение WPF. Я использую Prism и его ViewLocator.Prism ViewLocator: Как исправить «Ваши представления должны реализовать IView»

Это означает, что, когда я точка зрения, что должно иметь ViewModel связанные с ней, Я, чтобы указать на него mvvm:ViewModelLocator.AutoWireViewModel="True" и сделать его реализует интерфейс IView, который я сделал, в коде позади.

В моем маленьком тестовом приложении все прекрасно работает, я получаю свой ViewModel, он установлен в DataContext моего представления.

Вопрос заключается в том, что везде я использую mvvm:ViewModelLocator.AutoWireViewModel="True", я получаю эту ошибку в «Список ошибок»:

«Ваше мнение должно осуществить IView»

От моего понимания, проблема в том, что редактор xaml, похоже, не проверяет, реализует ли мой код за классом этот интерфейс.

Как избежать этой ошибки?

ответ

1

Редактор XAML дает сообщение об ошибке, когда вы размещаете модель View в XAML. Вместо этого вы можете выполнить задание позади:

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

Тогда не отображается сообщение об ошибке.

+1

Спасибо, но мы очень любим быть способный во время разработки, в XAML, чтобы увидеть, что usercontrol является автозагрузкой. – J4N

3

На самом деле Prism 6, который только что был выпущен еще, устраняет необходимость наличия в IView, так что вы не имеете это сообщение в малейшей :)

+0

IView нет в Prism 6, и он больше не нужен. – Elangesh

1

Если вы не хотите, чтобы обновить 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 использовать это свойство вместо одного от Призма:

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