2010-01-14 17 views
4

J'ai une liste de "pages" personnalisées dans mon application. Chaque page représente une vue d'interface utilisateur différente. Ils ont des propriétés simples, comme un titre de chaîne et une icône, mais ils ont également un certain nombre de propriétés complexes, consistant en des contrôles à insérer dans la barre d'outils principale, une zone de contenu principal, des panneaux de barre d'état personnalisés, etc. FrameworkElement afin que la liaison de données fonctionne correctement à l'intérieur de XAML de chaque page. Jusqu'à présent, tout ce que j'ai décrit fonctionne great.Appliquer DataTemplate au type dérivé de FrameworkElement

Le problème survient lorsque j'essaie de lancer rapidement une liste de toutes les pages. J'ai un ItemsControl que j'ai lié à la liste des pages actives, et un DataTemplate affecté à un ItemTemplate consistant simplement en une étiquette liée à la propriété Title de la page (comme indiqué, c'est juste une chaîne normale). Quand je le lance, rien n'affiche cependant dans la liste et je reçois ce dans la sortie d'erreur:

System.Windows.Data Error: 25 : ItemTemplate and ItemTemplateSelector are not valid for item.; Type='WelcomePage'

Si je change le type de base à tout sauf FrameworkElement les œuvres de modèle, mais la liaison de données à l'intérieur de chaque page se décompose horriblement (la liaison aux éléments via ElementName échoue, bien que les deux contrôles impliqués soient des enfants d'un FrameworkElement commun, qui est défini dans le code XAML de la page). Quelqu'un connaît un moyen d'obtenir un DataTemplate à appliquer à un type dérivé de FrameworkElement ou d'obtenir une liaison de données pour travailler dans un fichier XAML enraciné par un non-FrameworkElement?

+0

Si vous êtes toujours intéressé par une réponse à cette question, pouvez-vous publier votre code pour le type dérivé de FrameworkElement? L'élément Framework a beaucoup de propriétés et de méthodes sans implémentations par défaut et suppose que les classes dérivées fourniront la plomberie correcte. Les autres classes dérivées de FrameworkElement fournissent des implémentations, c'est pourquoi les choses fonctionnent si vous changez le type de classe. –

Répondre

0

Pas que cela vous fasse probablement du bien maintenant, mais j'ai eu le même problème dans des circonstances similaires. Je viens de substituer le contrôle des éléments pour un listview. Comme l'utilisation d'un listbox m'a causé des erreurs de liaison supplémentaires.