2010-08-30 3 views
0

J'ai un UserControl avec une propriété de type Dictionary, appelée HighlightedDates. La propriété contient un ensemble de dates, avec une chaîne d'info-bulle pour chaque date, et elle fonctionne correctement lorsqu'elle est définie à partir du code.WPF: Liaison de données d'une propriété de dictionnaire

Je veux lier la propriété HighlightedDates à une propriété modèle de vue, DatesWithNotes, du même type, en utilisant ce balisage:

<MyControls:MyCalendar SelectedDate="{Binding SelectedDate}" 
         HighlightedDates="{Binding DatesWithNotes}" /> 

Malheureusement, je reçois cette exception lorsque je tente de le faire:

Une 'liaison' ne peut pas être définie sur la propriété 'Value' de type 'DictionaryEntry'. Une 'liaison' ne peut être définie que sur un DependencyProperty d'un DependencyObject.

Il semble que WPF essaie de lier une entrée individuelle, pas le dictionnaire lui-même. Comme alternative, je cherche à ce que le modèle de vue pousse chaque nouvelle valeur ajoutée à son dictionnaire vers le dictionnaire du contrôle de l'utilisateur, ce qui semble terriblement maladroit. Et cela m'amène à ma question: existe-t-il un moyen de faire fonctionner cette liaison? Merci de votre aide.

+0

J'ai essayé de le reproduire (en particulier la partie Dictionnaire) et cela semble fonctionner correctement. Fondamentalement, j'ai créé un UserControl avec une propriété Dictionary dependency, puis j'ai créé un ViewModel avec la même propriété de dictionnaire. Enfin, j'ai utilisé le contrôle UserControl dans une fenêtre, défini son DataContext à ViewModel et lié la propriété UserControl.Dictionary à la propriété ViewModel.Dictionary. Cela fonctionne très bien et je n'ai pas eu l'erreur. Donc je pense que cette erreur est lancée par autre chose. Peut-être que vous pouvez nous montrer la définition de UserControl? – ASanch

+0

Merci - J'ai répliqué votre test, et j'ai toujours la même erreur. J'ai reproduit le balisage et le code ci-dessous. Donc, évidemment, je fais quelque chose de mal ... –

Répondre

2

Ce problème devient plus intéressant. Karmicpuppet a tenté de reproduire l'erreur en utilisant un projet de test simple - voir son commentaire ci-dessus. Il n'a pas eu l'erreur dans son test, mais je l'ai eu quand j'ai fait le même test.

J'ai beaucoup lu sur les problèmes liés à la liaison de données à un objet de dictionnaire. Dans mon projet, je me suis refait une idée pour éliminer le dictionnaire et passer à autre chose. Je n'ai pas entendu d'autres suggestions, alors je vais mettre fin à cette question.

+0

Votre modèle d'affichage expose 'MonthNotes', mais vous êtes binging' MonthDates': 'MyDictionary =" {Binding Path = MonthDates ... ' –

+0

Merci - corrigé. obtenir la même erreur. –

2

Il semble y avoir un bogue dans le concepteur VS2010 WPF qui peut provoquer l'apparition de ce message d'erreur, même lorsque la liaison fonctionne correctement à l'exécution.

1

Bien que cette question soit déjà ancienne, l'erreur "A 'Binding" ne peut pas être définie sur la propriété' Value 'de type' DictionaryEntry '. Une' liaison 'ne peut être définie que sur DependencyProperty d'un DependencyObject. " pourrait être levé juste parce que DependencyProperty n'est pas défini comme static.

C'est quelque chose avec lequel je me bats de temps en temps, juste pour remarquer que le mot-clé static est manquant. Il est si facile de passer inaperçu, surtout quand il y a le mot-clé readonly aussi.

Questions connexes