Comment utiliser un modèle de liaison à l'intérieur du modèle de données dans un contrôle personnalisé (Silverlight)
Je suis en train de créer un contrôle qui va prendre ItemsSource
et InnerTemplate
et affichera tous les articles emballés dans CheckBox
es.
Le contrôle a 2 propriétés de dépendance:
public static readonly DependencyProperty ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(IEnumerable), typeof(CheckBoxWrapperList), null);
public static readonly DependencyProperty InnerTemplateProperty = DependencyProperty.Register("InnerTemplate", typeof(DataTemplate), typeof(CheckBoxWrapperList), null);
et voici le modèle:
<ControlTemplate TargetType="local:CheckBoxWrapperList">
<Grid>
<Grid.Resources>
<DataTemplate x:Key="wrapper">
<CheckBox>
<ContentPresenter ContentTemplate="{TemplateBinding InnerTemplate}" Content="{Binding}" />
</CheckBox>
</DataTemplate>
</Grid.Resources>
<ItemsControl ItemTemplate="{StaticResource wrapper}" ItemsSource="{TemplateBinding ItemsSource}" />
</Grid>
</ControlTemplate>
Cependant, cette approche ne fonctionne pas.
La liaison dans le ControlPresenter.ContentTemplate
à l'aide de TemplateBinding
ne fonctionne pas.
Cependant, lorsque je n'utilise pas la liaison de modèle de référence et le modèle en tant que ressource statique, alors qu'il fonctionne comme prévu.
- Pourquoi ne puis-je pas utiliser le modèle de liaison à l'intérieur du contenu de l'animateur dans datatemplate?
- Ce qui me manque ici? Spécial balisage nécessaire?
- Est-il un moyen pour obtenir le comportement attendu?
Merci d'avance.
Avez-vous compris cela? J'ai le même problème.
OriginalL'auteur stefando | 2011-01-08
Vous devez vous connecter pour publier un commentaire.
Objet templatebinding ne peut être utilisé à l'intérieur d'un ControlTemplate, vous l'utilisez à l'intérieur d'un DataTemplate. (Le fait que le DataTemplate est dans un ControlTemplate n'a pas d'importance)
OriginalL'auteur
Silverlight et WPF
Vous pouvez contourner ce problème avec un relatif de liaison de la source:
Au lieu de:
Vous utilisez:
C'est un peu messier, mais il fonctionne.
WinRT
WinRT n'a pas AncestorType. J'ai quelque chose qui fonctionne mais c'est horrible.
Vous pouvez utiliser une propriété attachée à stocker un objet templatebinding valeur et accéder ensuite à l'aide de ElementName...
Je ne sais pas si il ya une meilleure façon pour WinRT.
Urgh que c'est le désordre. La messagerie unifiée. J'ai travaillé sur quelque chose qui fonctionne techniquement, l'ajout de répondre.
OriginalL'auteur