Propriété de dépendance affecté avec la valeur de la liaison ne fonctionne pas
J'ai un usercontrol avec une dépendance de la propriété.
public sealed partial class PenMenu : UserControl, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public bool ExpandCollapse
{
get
{
return false;
}
set
{
//code
}
}
public static readonly DependencyProperty ExpandCollapseProperty = DependencyProperty.Register("ExpandCollapse", typeof(bool), typeof(PenMenu), null);
//some more code
}
Et je suis attribuer une valeur dans le code XAML de la page:
<Controls:PenMenu x:Name="penMenu" Opened="Menu_Opened"
ExpandCollapse="{Binding PenMenuVisible}" />
Mais il n'est pas de frapper GET-DÉFINIR le cadre de ExpandCollapse propriété dans le contrôle usercontrol.
J'ai donc ajouté bool bool convertisseur juste pour vérifier que la valeur est passée avec la liaison comme:
<Controls:PenMenu x:Name="penMenu" Opened="Menu_Opened"
ExpandCollapse="{Binding PenMenuVisible, Converter={StaticResource booleanToBooleanConverter}}" />
Et avec point d'arrêt dans le Convertisseur, je vois la valeur transmise est correct.
Quelle est la raison possible, c'est pas affectée à la Propriété de Dépendance?
Également dans le code XAML de la page si je dis:
<Controls:PenMenu x:Name="penMenu" Opened="Menu_Opened"
ExpandCollapse="true"/>
puis il frappe l'ENSEMBLE de la partie de ExpandCollapse propriété dans le contrôle usercontrol.
Je suis coincé. C'est bizarre. S'il vous plaît aider.
Pour les développeurs à trouver cet, veuillez noter que lorsque le cadre de mise à jour d'une propriété de dépendance, il n'utilise PAS les propriétés CLR, il lit et écrit sur la pdd directement, ce qui est pourquoi vous devez utiliser l'événement a changé.
OriginalL'auteur ashish nirkhe | 2013-11-19
Vous devez vous connecter pour publier un commentaire.
C'est frustrant n'est-ce pas? Tout d'abord, comprendre un gestionnaire d'événements de changement. Comme ceci:
Alors, lisez cet article alors vous voyez il y a plus de problèmes que cela: http://blog.jerrynixon.com/2013/07/solved-two-way-binding-inside-user.html
Bonne chance!
Pourquoi, pourquoi la f*** est-ce? J'ai passé des jours sur ce problème. Pourquoi est-réglage de la DataContext de l'objet UserControl lui-même se comporter comme ça?
Oh mon... Merci pour votre blog! Qui a aidé... en quelque sorte.
OriginalL'auteur Jerry Nixon - MSFT
Les getter et setter d'une propriété de dépendance ne sont pas garantis pour être exécuté, et en particulier le WPF liaison moteur /XAML processeur est documenté pour contourner ces. Jetez un oeil sur MSDN - les getter/setter devrait juste être un wrapper autour de
GetValue
/SetValue
sur leDependencyProperty
lui-même.Au lieu de réagir dans le setter de votre propriété, vous devez ajouter une propriété a changé de gestionnaire dans l'appel d'origine pour
DependencyProperty.Register
, quand vous pouvez agir sur la nouvelle valeur.(voir d'autres questions).
OriginalL'auteur Nicholas W