2015-08-19 11 views
7

Sto avviando un'applicazione WPF. Io uso Prism e il suo ViewLocator.Prism ViewLocator: Come risolvere "Le tue viste devono implementare l'IView"

implica che quando ho una visione che deve avere un ViewModel legato ad esso, ho indicare su di esso mvvm:ViewModelLocator.AutoWireViewModel="True" e renderlo implementa l'interfaccia IView, che ho fatto, nel codice dietro.

Nella mia piccola applicazione di test, ogni cosa funziona bene, ottengo il mio ViewModel, è impostato sul DataContext della mia vista.

Il problema è che ogni luogo sto usando il mvvm:ViewModelLocator.AutoWireViewModel="True", ottengo questo errore nella sezione "Elenco errori":

"Le vostre opinioni deve implementare IView"

Dalla mia comprensione, il problema è che l'editor xaml non sembra controllare se il mio codice dietro la classe implementa questa interfaccia.

Quindi, come evitare questo errore?

risposta

1

L'editor XAML fornisce un messaggio di errore quando si individua il modello di vista in XAML. È possibile invece eseguire il lavoro nel codice sottostante:

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

Quindi non viene visualizzato alcun messaggio di errore.

+1

Grazie, ma ci piace molto essere in grado al momento della progettazione, in XAML per vedere quale dispositivo di controllo è AutoWired – J4N

3

Infatti Prisma 6, che è appena stato ancora rilasciato, eliminare la necessità di avere un IView, in modo da non avere più questo messaggio :)

+0

IView non è presente in Prism 6 e non è più necessario. – Elangesh

1

Se non si desidera eseguire l'aggiornamento a Prisma 6 , ecco la soluzione.

Prendere la source code of the ViewModelLocator class e nel metodo AutoWireViewModelChanged rimuovere questa riga:

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

Cambiare lo spazio dei nomi di questa classe per lo spazio dei nomi:

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

E in XAML utilizzare questa proprietà invece di quello da Prism:

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