10
votes

Impossible de trouver la vue pour ViewModel

J'ai une application WPF utilisant caliburn.micro. J'ai une vue MyView: xxx

J'ai aussi myViewModel: xxx

à cause d'une raison quelconque, je Obtenez le message suivant sur la commande de l'onglet:

Impossible de trouver la vue pour référencainanceworkspace.myviewModel.

Pourriez-vous expliquer pourquoi cela pourrait-il arriver? Merci.


0 commentaires

6 Réponses :


11
votes

Caliburn Micro s'attend à une certaine structure de fichiers au sein de votre projet. Vos vues et vos images de vie doivent être dans des dossiers séparés nommés vues et viewmodels.

ICI est un bon exemple de bonjour qui décrit cela.


16 commentaires

L'application que je maintiens a déjà eu diverses vues et mots de vue. Aucun d'entre eux n'existait dans des dossiers avec des noms de vues et des images de vue des noms, et pourtant ils ont travaillé. Ils existaient tous dans différents projets de bibliothèque de classe, et j'ajoute une nouvelle one appelée référencemAserventSpace. Je me demande si les projets devraient avoir des paramètres particuliers que je ne suis pas au courant de ...


Peut-être qu'il est fait manuellement caliburn.micro.view.setmodel (Nameview, NameviewModel);


ou dans la vue


Non, de telles choses ne sont pas utilisées dans l'application. Je l'ai essayé quand même et ça n'a pas aidé :(


Pouvez-vous partager le contenu de la méthode de configuration de bootstrapper? Ou le contenu de la méthode IEnumerable SélectionMblies () (si c'est là).


Protected Override Inumerable Sélectionné () {var assyliste = nouvelle liste {system.reflet.assembly.getexecutingassemb Ly ()}; var dir = nouvelle répertoireInfo ("."); _workspaceassyliste = nouvelle liste (); _workspaceasysyliste.addrange (dir.getfiles ("* workspace.dll"). S électeur (fichier => assembly.loadfile (fichier.fullName))); assylist.addrange (_workspaceassyliste.Tearray ()); Retour Assylist}


J'ai débogué cette méthode et je pouvais voir mon nouveau projet dans Assylist.


Je suis un peu à court d'idées :). Un dernier coup dans le noir. Est-ce que ViewLocator ou ViewModellocator est utilisé quelque part (si oui comment)?


Viewlocator est utilisé au même endroit, mais il semble avoir rien à voir avec mon problème, car cette méthode n'est pas appelée à d'autres vues qui fonctionnent.


Deviner. Au lieu de copier et coller des fichiers de vision et de viewModel d'un autre endroit, j'ai créé une nouvelle nouvelle USERCONTROL pour la vue et une classe pour la viewModel ... et cela a fonctionné! Je ne sais toujours pas quelle est la différence si ...


Heureux que vous ayez réussi à faire. Si vous trouvez la cause première, laissez un message ou créez une réponse, car celui-ci n'est pas vraiment utile :).


Cette "attente de certaines structures de fichiers au sein de votre projet" semble être une limitation majeure de Caliburn Micro pour moi. L'ensemble du point de MVVM est certainement de découpler le point de vue de la vue et de la vue, de sorte qu'ils puissent vivre de manière isolée les uns des autres. Avec ce modèle, non seulement ils sont étroitement couplés, ils sont faits ainsi par «Convention» plutôt que par explicitement.


Merci @shadeofgrey ne savait pas à propos de la vue.setmodel


Le blog n'est plus présent.


Merci @corey remplacé par le lien de Webarchive.


Si vous n'avez pas ajouté une fenêtre sous vues, cela ne fonctionnerait pas. Vous devriez vérifier la vue dans le dossier Vues. Cela devrait être la fenêtre ou l'usercontrol.



8
votes

Vous devriez remplacer les éléments de sélection sur BootsTrapper et fournir un nom d'assemblage où votre vision réside dans.


0 commentaires

15
votes

Juste pour l'avenir, cela arrive également après avoir renommé des cours / des packages, mais dans la vue XAML Fichier "X: Class" n'est pas mis à jour.


0 commentaires

3
votes

Assurez-vous de disposer de dossiers ViewModels et de vues. Assurez-vous également que les noms de vos classes et UserControls / Windows suivent également ces conventions de nommage comme:

  • = ViewModels
  • == YoloviewModel
  • = vues
  • == yoloview

    Si les vues et les images de vue sont situées dans un assemblage différent, essayez ceci:

    dans votre bootstrapper, vous devez ajouter l'assemblage où la vue de la vue / la vue est située: < Pré> xxx


0 commentaires

0
votes

Vérifiez l'erreur de TYPO. Moyenne Si votre nom de classe ViewModel est ShellviewModel.cs, alors votre nom de vue doit être Shellview. Typo Erro peut être dans votre dossier ViewModel que vous avez ShelviewModel.cs et dans votre dossier View, vous avez COKVIEW.CS.


0 commentaires

1
votes

I Argée, je pense que résout ceci de deux voies. 1. En solution, vous devez avoir deux dossiers, un nom est "Vues" une autre est "ViewModels".

2.En votre bootstrapper, vous devez ajouter l'assemblage dans lequel la vue ou la vue est située: P>

protected override IEnumerable<Assembly> SelectAssemblies()
{
    var assemblies = base.SelectAssemblies().ToList();
    assemblies.Add(typeof(Project.ViewsNamespace.SomeView).Assembly);
   return assemblies;
}


0 commentaires