web-dev-qa-db-fra.com

Quelle est la différence entre propriété et propriété de dépendance

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é?

35

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.

7
Simsons

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.

56
AnthonyWJones

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. 

  1. Héritage de la propriété Property: Par héritage de la propriété Property, nous entendons que la valeur d'une propriété de dépendance peut être remplacée dans la hiérarchie de manière à ce que la valeur ayant la priorité la plus élevée soit finalement définie. 
  2. Validation des données: Nous pouvons imposer le déclenchement automatique de la validation des données chaque fois que la valeur de la propriété est modifiée. 
  3. Participation à l'animation: La propriété de dépendance peut s'animer. L'animation WPF dispose de nombreuses fonctionnalités pour modifier la valeur à un intervalle. En définissant une propriété de dépendance, vous pouvez éventuellement prendre en charge Animation pour cette propriété. 
  4. Participation aux styles: Les styles sont des éléments qui définissent le contrôle. Nous pouvons utiliser la propriété Style Setters on Dependency. 
  5. Participation aux modèles: Les modèles sont des éléments qui définissent la structure générale de l'élément. En définissant la propriété Dependency, nous pouvons l’utiliser dans les modèles. 
  6. DataBinding: Comme chaque propriété de dépendance appelle elle-même 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. 
  7. CallBacks: Vous pouvez avoir des rappels vers une propriété de dépendance. Ainsi, chaque fois qu'une propriété est modifiée, un rappel est déclenché. 
  8. Ressources: Une propriété de dépendance peut prendre une ressource. Ainsi, en XAML, vous pouvez définir une ressource pour la définition d'une propriété de dépendance. 
  9. Metadata overrides: Vous pouvez définir certains comportements d'une propriété de dépendance à l'aide de PropertyMetaData. Par conséquent, le remplacement d'une forme de métadonnée d'une propriété dérivée ne vous obligera pas à redéfinir ou à réimplémenter toute la définition de la propriété. 
  10. Designer Support: Une propriété de dépendance est prise en charge par Visual Studio Designer. Vous pouvez voir toutes les propriétés de dépendance d'un contrôle répertoriées dans la fenêtre Propriétés du concepteur. 

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

22
Kishore Kumar

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.

0
KamalDeep

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.

0
Ahmad