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

les propriétés de dépendances sont créées de la même manière que les propriétés.

Est une propriété de dépendance utilisée uniquement lors de la création d'un contrôle personnalisé?

35
demandé sur P.K 2010-09-09 11:05:10

5 réponses

la propriété dépendance est une propriété (pas elle-même, mais dépendante d'une autre, disons une propriété liant XAML) qui enregistre une autre propriété.

la propriété dependecy enregistre l'autre propriété liant dans le code derrière en l'enregistrant. Voici un exemple qui est utilisé dans mon projet:

public static DependencyProperty ImageUri = DependencyProperty.Register("Source", typeof(BitmapImage), typeof(CustomImagePlaceHolder), new PropertyMetadata(null));

dans le code ci-dessus L'ImageUri, est une propriété de dépendance qui enregistre la Source, qui est définie/déclarée à l'intérieur de generic.xaml (tout ce qui n'est pas sûr si déclaré, défini ou n'importe quoi d'autre) comme suit:

..HorizontalAlignment="Center"
VerticalAlignment="Center"
Height="{TemplateBinding Height}"
Width="{TemplateBinding Width}"
/>

donc ici il est très important que la valeur de liaison du modèle dans le XAML soit enregistrée comme propriété de dépendance dans le code derrière.

donc quand nous avons défini dans XAML que la Source de L'Image devrait être template bind avec Source, nous avons enregistré la même Source Comme une 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, donc nous avons défini typeof (BitmapImage).

maintenant 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 suit:

public BitmapImage Source
        {
            get
            {

   string strURI = (string)GetValue(CustomImagePlaceHolder.ImageUri);
                return new BitmapImage(new Uri(strURI));
            }
            set
{
SetValue(CustomImagePlaceHolder.ImageUri, value);
 }

        }

maintenant c'est comme ça que ça se passe, nous définissons la valeur de notre code derrière ou xaml à la propriété source définie ci-dessus, et ensuite elle définit la valeur de la dépendance propriété ImageUri, qui définit la valeur dans le template binding Source, comme nous avons enregistré ImageUri comme Source, c'est-à-dire presennt generic.XAML.

7
répondu Simsons 2016-05-23 13:17:13

les propriétés de dépendance et les propriétés standard sont très différentes.

les principales fonctionnalités fournies par les propriétés de dépendances sont le support de liaison et animation. Si vous voulez attribuer une valeur à une propriété en utilisant un Binding ou le modèle liant cette propriété doit être une propriété de dépendance. Lors de l'animation d'une propriété, la propriété de dépendance a peut suivre à la fois la Valeur assignée courante et la valeur animée courante.

On un autre avantage souvent négligé est que le stockage n'est nécessaire que pour les propriétés qui ont des valeurs attribuées. Un contrôle typique peut avoir beaucoup de propriétés, mais son code rare qui 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 seulement quelques-unes sont effectivement définies. Avec les propriétés de dépendance, les valeurs par défaut sont stockées comme des méta-données relatives à la propriété et ne nécessitent pas de mémoire attribuée par instance de contrôle si la propriété reste non affecté.

les propriétés de dépendance ne sont pas limitées aux contrôles (tout ce qui provient de DependencyObject peut avoir ensuite) cependant, c'est sur les contrôles ou au moins FrameworkElements là où ils sont les plus utiles.

55
répondu AnthonyWJones 2010-09-09 07:56:55

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 CLR normales.

  1. Valeur De La Propriété Héritage: par héritage de valeur de propriété nous entendons que la valeur d'une propriété de dépendance peut être dépassée dans la hiérarchie de telle sorte que la valeur avec la plus haute priorité sera fixée en fin de compte.
  2. Validation Des Données: Nous pouvons imposer des Données La Validation doit être déclenchée automatiquement 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 a beaucoup de capacités pour changer la valeur à un intervalle. En définissant une propriété de dépendance, vous pouvez éventuellement prendre en charge L'Animation pour cette propriété.
  4. Participation dans des Styles : les Styles sont des éléments qui définissent le contrôle. Nous pouvons utiliser des Setters de Style sur la propriété de dépendance.
  5. Participation à des Modèles : les gabarits sont des éléments qui définissent la structure globale de l'élément. En définissant la propriété de dépendance, nous pouvons l'utiliser dans les templates.
  6. liaison de données : comme chacune des propriétés de dépendance elle-même invoque INotifyPropertyChanged chaque fois que la valeur de la propriété est modifiée, DataBinding est supporté en interne. Pour en savoir plus sur INotifyPropertyChanged, veuillez lire.
  7. Rappels : Vous pouvez avoir callbacks à une propriété de dépendance, de sorte que chaque fois qu'une propriété est changée, un callback est généré.
  8. Ressources: Une propriété de Dépendance peut prendre une Ressource. Ainsi, dans XAML, vous pouvez définir une ressource pour la définition d'une propriété de dépendance.
  9. overrides Metadata : vous pouvez définir certains comportements d'une propriété de dépendance en utilisant PropertyMetaData. Ainsi, l'annulation d'un formulaire de métadonnées d'une propriété dérivée ne vous obligera pas à redéfinir ou de réimplanter l'ensemble de définition de propriété.
  10. Prise En Charge Du Concepteur : 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és dans la Fenêtre de Propriété du Concepteur.

dans ceux-ci, certaines des fonctionnalités ne sont supportées que par des propriétés de dépendances. Animation,Styles,Templates, valeur de la propriété L'héritage etc. ne pouvait être participé qu'en utilisant la propriété de dépendance. Si vous utilisez CLR propriété à la place dans de tels cas, le compilateur générera une erreur.

s'il vous plaît aller à travers 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(SV.95).aspx

22
répondu Kishore Kumar 2014-04-09 07:28:21

Si vous tapez propdp et appuyez sur le caractère de l'onglet dans VS editor, alors la documentation générée automatiquement des propriétés de dépendance est définie comme:

// L'utilisation D'une propriété de dépendance comme support pour MyProperty.

Cela permet l'animation, le style, la reliure, etc...

0
répondu Ahmad 2017-01-31 20:15:17

la principale différence entre une droperty de dépendance et une propriété clr standard est qu'une propriété de dépendance peut être la cible d'une liaison. Cela permet de lier la valeur de la propriété à une valeur fournie par un autre objet.

je suggère que si vous faites un contrôle personnalisé ou une extension de markup, vous voulez généralement exposer n'importe laquelle de ses propriétés publiques comme propriétés de dépendance de sorte que le consommateur de votre contrôle peut mieux manipuler les paramètres dans XAML (sans avoir à le faire en code-behind).

si votre propriété est généralement la source d'un databinding (par exemple fournir le texte d'un texte pour un texte), je recommande d'utiliser une propriété CLR standard et d'avoir la classe containing implement INotifyPropertyChanged.

Plus d'....

une propriété de dépendance fournit une fonctionnalité qui étend la fonctionnalité d'une propriété par opposition à une propriété qui est soutenue par un champ. Souvent, chacun de ces la fonctionnalité représente ou prend en charge une caractéristique particulière de l'ensemble des caractéristiques du FPF.

Ressources

liaison de Données

Style

Animations

les métadonnées l'emportent sur les

valeur de la propriété héritage

http://msdn2.microsoft.com/en-us/library/ms752914.aspx

J'espère que cela vous aidera.

0
répondu KamalDeep 2017-05-08 05:38:50