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).
Forse era semplicemente una questione di riferimenti di assemblaggio, la classe statica era semplicemente sconosciuta e non per, potrebbe avere cause del ritorno vuoto. –
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
@Sarà, è 15 e il problema continua :) – usefulBee