J'ai créé un contrôle personnalisé avec, entre autres, les éléments suivants:Comment se lier à une propriété personnalisée dans un contrôle personnalisé Silverlight
public partial class MyButton : UserControl
{
public bool Enabled
{
get { return (bool)GetValue(EnabledProperty); }
set {
SetValue(EnabledProperty, value);
SomeOtherStuff();
}
}
}
public static readonly DependencyProperty EnabledProperty =
DependencyProperty.Register("Enabled", typeof(bool), typeof(MyButton), new PropertyMetadata(true));
public static void SetEnabled(DependencyObject obj, bool value)
{
obj.SetValue(EnabledProperty, value);
}
public static bool GetEnabled(DependencyObject obj)
{
return (bool) obj.GetValue(EnabledProperty);
}
}
Dans mon XAML, je (essayer de) utiliser la liaison à définir la propriété Activé:
<MyButton x:Name="myButtom1" Enabled="{Binding CanEnableButton}"/>
Je sais que la liaison entre mon contrôle et le modèle de données sous-jacentes est valide et le travail que je peux lier « IsEnabled » (une propriété native du UserControl sous-jacente) et cela fonctionne comme prévu. Cependant, ma propriété Enabled n'est jamais définie via la liaison ci-dessus. J'ai mis des points d'arrêt sur mon ensemble de propriété/get et ils ne sont jamais frappés du tout.
Je ne peux qu'imaginer J'ai manqué quelque chose concernant la liaison dans mon contrôle personnalisé. Quelqu'un peut-il voir quoi?
J'ai essayé d'implémenter INotifyPropertyChanged sur mon contrôle (et d'appeler l'événement PropertyChanged de mon setter Enabled) ... mais cela ne l'a pas corrigé. [BTW: Dans le cas où vous vous demandez "Pourquoi?": Je ne peux pas intercepter les changements à l'état IsEnabled du contrôle de base, donc j'ai décidé d'implémenter et d'utiliser ma propre version d'une propriété Activer/Désactiver (qui J'ai appelé Enabled) - un où je pourrais brancher mon propre code dans le setter de la propriété]
Je pense que l'utilisation de l'événement IsEnabledChanged intégré est un meilleur choix que l'implémentation d'une autre propriété "enabled" sur un contrôle. (Voir ma réponse). – WiredPrairie
Merci. C'est utile à savoir. Comme indiqué ci-dessous, l'utilisation de l'événement modifié Activé existant est ce que je devrais (et ferai). Cependant, je l'imagerie, je vais devoir créer une propriété bindable sur un contrôle à un moment donné et vous conseiller sera inestimable à ce moment-là. – Trevor