2015-02-21 24 views
5

Desidero che il mio controllo utente visualizzi i dati quando lo visualizzo nella finestra di progettazione WPF in Visual Studio.Errore "metodo non trovato" in XAML designer

ViewModel non ha un costruttore predefinito, quindi ho scritto la mia classe statica TestData per costruire il modello e tutte le sue dipendenze.

public static class TestData 
{ 
    public static ELabelViewModel ELabelViewModel 
    { 
     get 
     { 
      return new ELabelViewModel 
      (
       new ControlPanelGridLine(TestData.ELabel), 
       new SerialPortFactoryImpl(), 
       new Repository(), 
       new PriceLabelGenerator(TestData.IPriceLabelViewModelFactory) 
      ); 
     } 
    } 

    // Other static getter methods 

Questo tutto viene compilato senza problemi. Tuttavia, i problemi cominciano quando aggiungo questo nel XAML:

d:DataContext="{x:Static local:TestData.ELabelViewModel}" 

L'editor XAML mette una linea blu ricci sotto il mio attributo d:DataContext, e nella lista degli errori vedo:

Errore 7 non Method trovato: 'Void ELabel.Manager.ViewModels.ELabelViewModel..ctor (ELabel.Manager.ViewModels.ControlPanelGridLine, ELabel.Control.ISerialPortFactory, ELabel.Data.IRepository, ELabel.ImageGeneration.IPriceLabelGenerator)'.

La mia interpretazione di questo è che sta trovando la classe TestData, e trovando anche la proprietà TestData.ELabelViewModel. Semplicemente non può risolvere il costruttore che viene chiamato all'interno del getter.

Perché non è possibile trovare il costruttore ELabelViewModel? Per confermare il mio codice era OK, ho fatto questa visualizzazione di prova modellare il contesto dati attuale utilizzando DataContext= anziché d:DataContext=. In questo caso ho aperto l'applicazione e confermato che, durante il runtime, tutto funziona come previsto: TestData.ELabelViewModel è stato richiamato, il codice è incluso nella funzione getter e ha utilizzato questo modello di visualizzazione. È solo il progettista che non riesce a eseguire il codice.

La classe ELabelViewModel si trova in un assieme separato denominato ELabel.Manager.ViewModels. L'editor non riesce a caricare completamente questo assieme?

Successivamente Modifica

ho provato a spostare questa classe TestData al ELabel.Manager.ViewModels montaggio (stesso assembly che il costruttore risiede). Abbastanza sicuro, ora funziona bene, e posso vedere i dati di test quando si visualizza il controllo nell'editor. Curioso.

Ho ricontrollato che la classe ELabelViewModel e il costruttore sono pubblici (che naturalmente è, altrimenti non avrei mai potuto creare l'applicazione).

+0

Forse era semplicemente una questione di riferimenti di assemblaggio, la classe statica era semplicemente sconosciuta e non per, potrebbe avere cause del ritorno vuoto. –

+0

Errore di Lemme: restituisce un errore nella finestra di progettazione, ma viene compilato e funziona correttamente? Il designer fa sempre quel tipo di cazzate. Ignoralo. Spero che sarà un po 'più affidabile nel '15. – Will

+0

@Sarà, è 15 e il problema continua :) – usefulBee

risposta

0

a implementare tutte le mie classi ViewModel come questo:

<UserControl x:Class="MyApp.Views.MainView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:vm="clr-namespace:MyApp.ViewModel" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" Height="607" Width="616"> 

    <UserControl.DataContext> 
     <vm:TestData/> 
    </UserControl.DataContext> 
Problemi correlati