2011-05-14 4 views
2

Je reçois une exception XamlParseException vraiment étrange, et je ne sais pas pourquoi.Caliburn.Micro question: XamlParseException "Impossible de définir un membre inconnu '{clr-namespace: Caliburn.Micro; assembly = Caliburn.Micro} View.Model'"

Le message est "Impossible de définir un membre inconnu '{clr-namespace: Caliburn.Micro; assembly = Caliburn.Micro} View.Model'."

Dans le modèle de vue, je ObservableCollection que je suis dans le constructeur d'initialisation comme celui-ci:

internal class EntityListScreenViewModel : Screen 
{ 
    public EntityListScreenViewModel() 
    { 
     var list = new List<Entity>() { new Entity() { Name = "Joe" } }; 
     this.Entities = new ObservableCollection<Entity>(list); 
    } 

    public ObservableCollection<Entity> Entities { get; set; } 
} 

Voici la vue:

<Window x:Class="WpfApp.EntityListScreenView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Height="350" Width="525"> 
    <Grid> 
     <ListBox x:Name="Entities"/> 
    </Grid> 
</Window> 

Quand j'appelle WindowManager.ShowWindow() Sur une instance de EntityListScreenViewModel, j'obtiens l'exception.

Si je ne suis pas ajouter une entité à la liste (en utilisant à la place var list = new List<Entity>();), je ne reçois pas l'exception.

Quelqu'un a-t-il des idées?

Mise à jour:

J'ai essayé de changer le ObservableCollection être de type string et ajouté une seule chaîne, et je n'ai pas l'exception. Mon soupçon est que Caliburn.Micro est en quelque sorte à la recherche d'une vue pour représenter l'Entité dans le ListBox. Cela pourrait-il être ce qui se passe?

Mise à jour 2:

J'ai finalement compris ce qui se passait vraiment ... la DefaultItemTemplate dans le ConventionManager avait une Xaml analysable cherchait l'assemblée « Caliburn.Micro », mais j'avais mis le code avec un autre assembly. Changé le Xaml et le problème est parti.

Répondre

0

Je soupçonne que Caliburn.Micro est à la recherche d'une certaine manière pour une vue de représenter l'entité dans la zone de liste

Oui, voici ce qui se passe. Par défaut, lorsque vous liez une liste à l'aide d'une convention de nom, Caliburn Micro l'interprète lorsque vous vous liez à une liste de ViewModels; pas une liste d'entités. Cela vous permet de lier à une liste de ViewModels sans avoir besoin de spécifier la vue spécifique à utiliser dans le ItemTemplate du ItemsControl et ce que vous obtenez est une liste de vues spécifiques à ce ViewModel.

Pour vous assurer que cela ne se produise pas, vous devriez pouvoir lier manuellement le ListBox. Si Caliburn Micro voit déjà une liaison ItemsSource, il ignorera la convention.

<ListBox x:Name="Entities" ItemsSource="{Binding Entities}"/> 
+1

Merci pour l'aide Joe! En fait, j'ai réalisé que le bug était dû à un mauvais nom de l'assemblage: voir la dernière mise à jour de la question. –

0

Je ne suis pas sûr, mais vous pouvez essayer de mettre EntityListScreenView dans Views espace de noms et EntityListScreenViewModel dans ViewModels espace de noms - Bien sûr, si vous l'utilisateur « standard » classe Bootstrapper.

Questions connexes