2010-07-02 5 views
1

J'essaie de créer une liste personnalisée qui comporte une liste d'objets. Bien que lorsque cela est défini à la fois dans le code Xaml et le code derrière je reçois une "erreur de balisage incorrect". Voici comment je configure les propriété PropertyKey et Property.Impossible de créer une propriété de dépendance de type collection

private static readonly DependencyPropertyKey ItemSourcePropertyKey = DependencyProperty.RegisterReadOnly(
     "ItemSource", 
     typeof(List<object>), 
     typeof(MultiSelectComboBox), 
     new FrameworkPropertyMetadata(null)); 

public static readonly DependencyProperty ItemSourceProperty = ItemSourcePropertyKey.DependencyProperty; 

Le champ est:

public List<object> ItemSource 
    { 
     get { return (List<object>)this.GetValue(ItemSourceProperty); } 
     set { this.SetValue(ItemSourceProperty, value); } 
    } 

L'erreur que je reçois est:

{"Cannot create instance of 'Window1' defined in assembly 'GroupExpansion, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. Exception has been thrown by the target of an invocation. Error in markup file 'Window1.xaml' Line 1 Position 9."} 

Quelqu'un at-il lié DependencyProperty à une liste avant? J'ai rencontré quelques tutoriels, mais quand je tente d'émuler les tutoriels, il tombe sur son visage. La liste et la propriété sont dans un fichier qui étend un UserControl. Si vous avez besoin de plus de détails, il suffit de demander. Je me suis cogné la tête sur le clavier pendant quelques jours. Semblent tourner en rond.

Vive

+0

Existe-t-il une exception interne à celle que vous mentionnez ci-dessus? –

+0

Yep un très utile: {"Exception a été levée par la cible d'une invocation."}, La source était: "PresentationFramework". Oh j'ai remarqué que j'ai laissé le constructeur pour la propriété qui est fait dans le constructeur de classe et lui assigne une liste vide Tim

+0

Ah ah, un peu plus d'information. J'ai changé la liste en ObservableCollection et en faisant cela, il a ensuite produit l'erreur suivante dans InnerException: La propriété 'ItemSource' a été enregistrée en lecture seule et ne peut pas être modifiée sans une clé d'autorisation. Maintenant, pour chercher un moyen de contourner cela. – Tim

Répondre

1

trouvé la solution, il semblerait que la propriété de dépendance doit être attaché à un ObservableCollection. Et puis pour le lier, il faut alors qu'il ne soit pas en lecture seule pour que DependencyPropertyKey puisse être supprimé et remplacé par seulement DependencyProperty. Serait incroyablement utile si quelqu'un a mis en place une page réelle pour cela.

Questions connexes