Les propriétés de dépendance sont créées de la même manière que les propriétés.
Une propriété de dépendance est-elle utilisée uniquement lors de la création d'un contrôle personnalisé?
La propriété de dépendance est une propriété (pas elle-même, mais dépendante d’une autre, disons une propriété de liaison XAML) qui enregistre une autre propriété.
La propriété dependecy enregistre l'autre propriété de liaison dans le code précédent en l'enregistrant. Voici un exemple utilisé dans mon projet:
public static DependencyProperty ImageUri = DependencyProperty.Register("Source", typeof(BitmapImage), typeof(CustomImagePlaceHolder), new PropertyMetadata(null));
Dans le code ci-dessus, ImageUri est une propriété de dépendance qui enregistre la source, qui est définie/déclarée dans generic.xaml (quelle que soit sa valeur déclarée, définie ou quoi que ce soit d'autre) comme suit:
..HorizontalAlignment="Center"
VerticalAlignment="Center"
Height="{TemplateBinding Height}"
Width="{TemplateBinding Width}"
/>
Il est donc très important que la valeur de liaison du modèle dans le code XAML soit enregistrée en tant que propriété de dépendance dans le code situé derrière.
Ainsi, lorsque nous avons défini dans XAML que la source d’image doit être liée au modèle, nous avons enregistré la même source En tant que DependencyProperty.
Nous devons dire quel type de propriété de dépendance est que, dans l'exemple ci-dessus, la source est le type de BitmapImage, nous avons donc défini typeof (BitmapImage).
À présent, le propriétaire/parent de cette propriété de dépendance est notre customControlClass CustomImagePlaceHolder, et nous l'avons défini à nouveau lors de l'enregistrement.
Maintenant, pour définir la valeur de la propriété depndency, en utilisant nos propriétés comme ci-dessous:
public BitmapImage Source
{
get
{
string strURI = (string)GetValue(CustomImagePlaceHolder.ImageUri);
return new BitmapImage(new Uri(strURI));
}
set
{
SetValue(CustomImagePlaceHolder.ImageUri, value);
}
}
Maintenant, voici comment cela se passe, nous définissons la valeur de notre code behind ou xaml sur la propriété source définie ci-dessus, puis définissons la valeur de la propriété de dépendance ImageUri, qui définit alors la valeur dans la liaison de modèle Source, comme nous l'avons déjà fait. enregistré ImageUri en tant que source, c'est-à-dire presennt generic.xaml.
Les propriétés de dépendance et les propriétés standard sont assez différentes.
Les principales caractéristiques fournies par les propriétés de dépendance sont la prise en charge de binding et animation . Si vous souhaitez affecter une valeur à une propriété à l'aide d'une variable Binding
ou d'un modèle, cette propriété doit être une propriété de dépendance. Lors de l'animation d'une propriété, une propriété de dépendance peut suivre à la fois la valeur assignée actuelle et la valeur animée actuelle.
Un autre avantage souvent négligé est que le stockage n'est nécessaire que pour les propriétés auxquelles des valeurs ont été attribuées. Un contrôle typique peut avoir beaucoup de propriétés, mais son code rare attribue une nouvelle valeur à toutes les propriétés. En fait, la plupart des propriétés sont laissées à leur valeur par défaut et seules quelques-unes sont réellement définies. Avec les propriétés de dépendance, les valeurs par défaut sont stockées en tant que méta-données liées à la propriété et ne nécessitent aucune mémoire allouée par instance de contrôle si la propriété reste non affectée.
Les propriétés de dépendance ne sont pas limitées aux contrôles (tout ce qui est dérivé de DependencyObject
peut en avoir), mais il s'agit de contrôles ou au moins FrameworkElements
où ils sont le plus utiles.
Avantages de la propriété de dépendance
En fait, une propriété de dépendance présente de nombreux avantages par rapport aux propriétés normales du CLR.
INotifyPropertyChanged
chaque fois que la valeur de la propriété est modifiée, DataBinding
est pris en charge en interne. Pour en savoir plus sur INotifyPropertyChanged
, veuillez lire. Dans ceux-ci, certaines des fonctionnalités ne sont prises en charge que par Dependency Property. Animation
, Styles
, Templates
, Valeur de la propriété Héritage, etc., ne peut être utilisé qu'avec la propriété Dependency. Si vous utilisez plutôt la propriété CLR dans de tels cas, le compilateur générera une erreur.
veuillez parcourir ces articles,
http://www.codeproject.com/KB/WPF/BeginWPF4.aspx#diff
et http://www.dotnetfunda.com/articles/article961-wpf-tutorial--dependency-property-.aspx
et http://msdn.Microsoft.com/en-us/library/cc221408(VS.95).aspx
La principale différence entre une propriété de dépendance et une propriété standard de clr réside dans le fait qu'une propriété de dépendance peut être la cible d'une liaison. Cela vous permet de lier la valeur de la propriété à une valeur fournie par un autre objet.
Je suggérerais que si vous créez un contrôle personnalisé ou une extension de balisage, vous souhaitez généralement exposer ses propriétés publiques en tant que propriétés de dépendance afin que le consommateur de votre contrôle puisse mieux manipuler les paramètres en XAML (sans avoir à le faire en code). -derrière).
Si votre propriété est généralement la source d'une liaison de données (par exemple, en fournissant le texte d'un bloc de texte), je vous recommanderais d'utiliser une propriété CLR standard et de faire en sorte que la classe qui le contient implémente INotifyPropertyChanged.
Plus loin....
Une propriété de dépendance fournit une fonctionnalité qui étend la fonctionnalité d'une propriété par opposition à une propriété qui est sauvegardée par un champ. Souvent, chacune de ces fonctionnalités représente ou prend en charge une fonctionnalité spécifique de l'ensemble des fonctionnalités WPF.
Ressources
Liaison de données
Modes
Animations
Les métadonnées remplacent
Héritage de la valeur de la propriété
http://msdn2.Microsoft.com/en-us/library/ms752914.aspx
J'espère que cela t'aides.
Si vous tapez propdp et tapez le caractère de tabulation dans l'éditeur VS, la documentation générée automatiquement des propriétés de dépendance est définie comme suit:
// Utilisation d'un DependencyProperty en tant que magasin de support pour MyProperty.
Ceci permet l'animation, le style, la reliure, etc.