Pourquoi une propriété de dépendance avec type XXX peut-elle obtenir une valeur d'un autre type?
est le type d'une propriété de dépendance vient de définir pour la valeur par défaut? P>
Par exemple: Strong> P> Structure de projet: P> Code de contrôle utilisateur (CarControl): strong> code xaml: em> p> code derrière (c #): p> #region Brand
public static readonly DependencyProperty BrandProperty =
DependencyProperty.Register("Brand", typeof(List<double>), typeof(CarControl),
new FrameworkPropertyMetadata((List<double>)null));
public List<double>Brand
{
get { return (List<double>)GetValue(BrandProperty); }
set { SetValue(BrandProperty, value); }
}
#endregion
3 Réponses :
Lorsque vous dites 'obtenir une valeur' p>
in: p>
Pourquoi une propriété de dépendance peut-elle avoir une valeur d'un autre type? P> blockQuote>
Ce que vous demandez est vraiment comment une liaison est résolue. p>
Le cadre WPF résout une liaison et obtient la valeur actuelle réelle. P>
Lorsque cela est fait de résoudre, le cadre tentera de "définir" la valeur de votre propriété de dépendance, et ne vérifiera-t-il que si les types sont identiques. P>
S'ils ne sont pas et aucun convertisseur n'a été fourni à la liaison, il lancera cette exception que vous avez ajoutée. p>
Vous êtes totalement manquant Typeconverters A >, qui sont enregistrés pour de nombreux types de cadres et permettent d'attribuer des valeurs de propriété des types autres que le déclarant.
Ce n'est pas ce qu'il a demandé.
Il est faux de ce que vous dites, que vous obtenez toujours une erreur contraignante lorsque les types ne correspondent pas ou qu'il n'y a pas de convertisseur de liaison - car il y a aussi des tyconverters. En plus de cela, votre message ne répond pas à la question. Il ne demande pas pourquoi il y a un message d'erreur contraignant (qui semble évident), mais pourquoi la valeur correcte est affichée bien qu'il existe une erreur de liaison. Vous pouvez lire ma réponse pour une explication.
Désolé pour ça, la prochaine fois que j'essaie d'aider quelqu'un, je vais inclure toute la page Documents MSFT, dactylographiée à la main.
Type de dépendanceProperty Définit le type de données stockées à l'intérieur.
Vous pouvez ne lier que le même type de données. Ou vous pouvez ajouter un convertisseur à la liaison. Pour ce faire, vous devez implémenter l'interface IVALUECONVERTER A >. Mais je ne comprends pas votre problème, je veux que vous affichaient une liste complète dans une chaîne? Ou souhaitez que vous créiez un élément pour chaque élément de la liste? P> Dans le second cas, je vous suggère d'utiliser des articlesControl et d'insérer votre commande personnalisée à l'intérieur du ItemTemplate . P> enfin vous don Il faut définir la valeur par défaut à chaque fois, vous pouvez supprimer Propertymetadata de l'incialisation de DépendecyProperty. Et rappelez-vous si vous le définissez là-bas, il sera statique et changera des autres instances uniquement avec des types de base. Si vous avez une classe, je vous suggère d'utiliser NULL et d'assigner-le dans le costructeur de classe. p>
La liaison dans
<TextBlock Text="{Binding Brand,
RelativeSource={RelativeSource AncestorType=UserControl}}"/>