{"id":120,"date":"2015-10-02T16:05:10","date_gmt":"2015-10-02T14:05:10","guid":{"rendered":"http:\/\/dtp-soft.de\/?p=120"},"modified":"2015-10-06T19:24:03","modified_gmt":"2015-10-06T17:24:03","slug":"wpf-dependencyproperties","status":"publish","type":"post","link":"http:\/\/dtp-soft.de\/?p=120","title":{"rendered":"WPF: DependencyProperties"},"content":{"rendered":"<p>Dependency Properties (DP) oder Abh\u00e4ngigkeitseigenschaften sind f\u00fcr WPF extrem wichtig und n\u00fctzlich. Nur mit ihrer Hilfe kann man die Datenbindung realisieren.<\/p>\n<p>Im Gegensatz zu WindowsForms-Eigenschaften werden ihre Werte nur gespeichert, wenn sie vom Standardwert abweichen. Die meisten Eigenschaften werden aber auf ihren Standardwerten bleiben, so dass viel Speicherplatz gespart werden kann.<\/p>\n<p>Eine Klasse, die Dependency Properties verwenden m\u00f6chte, muss von <strong>DependencyObject<\/strong> abgeleitet sein. Das stell allerdings normalerweise kein Problem dar, weil schon Control von DependencyObject abgeleitet ist.<\/p>\n<p>Eine Dependency Property wird als <strong>static readonly<\/strong> definiert.<br \/>\n<span class=\"lang:c# decode:true crayon-inline\">public static readonly DependancyProperty &lt;NameDerEigenschaft&gt;Property;<\/span><br \/>\nDabei gilt es als Konvention, dass der Eigenschaft das Property angeh\u00e4ngt wird. Im Anschluss wird auch ein Wrapper definiert, der auf das Property verzichtet und somit der gewohnten Benutzung \u00a0entspricht.<\/p>\n<p>Die DP muss nun noch dem WPF-Subsystem bekannt gemacht werden, dazu muss man sie im statischen Konstruktor registrieren:<\/p>\n<pre class=\"lang:c# decode:true\" title=\"Registrieren einer Dependency Property\">&lt;NameDerEigenschaft&gt;Property = DependencyProperty.Register(\"&lt;NameDerEigenschaft\", typeof(int), typeof(&lt;dieseKlasse&gt;));<\/pre>\n<p class=\"\">Damit wird auch der Typ der Eigenschaft festgelegt. Es gibt auch \u00dcberladungen der Register-Methode, denen man einen Standardwert \u00fcbergeben kann.<\/p>\n<p class=\"\">Nun sollte man noch einen Wrapper f\u00fcr die Dependency Property anlegen, damit man sie wie jede andere Eigenschaft benutzen kann und sie in XAML benutzbar ist.<\/p>\n<pre class=\"lang:c# decode:true \" title=\"Wrapper f\u00fcr Dependency Property\">[Category(\"Meine Kategorie\")]\r\npublic int &lt;Name&gt;\r\n{\r\n    get { return (int)GetValue(&lt;NameDerEigenschaft&gt;Property); }\r\n    set { SetValue(&lt;NameDerEigenschaft&gt;Property, value); }\r\n}<\/pre>\n<p>Wenn man die Dependency Property wieder auf ihren Standardwert stellen will, reicht es nicht aus, sie auf den selben Wert zu setzen, denn damit w\u00fcrde sie weiterhin einen eigenen Wert behalten. Man muss den Wert mit\u00a0<span class=\"lang:c# decode:true crayon-inline \">this.ClearValue(&lt;class&gt;.&lt;Name&gt;Property);<\/span>\u00a0 explizit auf den Standardwert setzen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dependency Properties (DP) oder Abh\u00e4ngigkeitseigenschaften sind f\u00fcr WPF extrem wichtig und n\u00fctzlich. Nur mit ihrer Hilfe kann man die Datenbindung realisieren. Im Gegensatz zu WindowsForms-Eigenschaften werden ihre Werte nur gespeichert, wenn sie vom Standardwert abweichen. Die meisten Eigenschaften werden aber auf ihren Standardwerten bleiben, so dass viel Speicherplatz gespart werden kann. Eine Klasse, die Dependency&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5,26],"tags":[],"class_list":["post-120","post","type-post","status-publish","format-standard","hentry","category-c","category-wpf"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/dtp-soft.de\/index.php?rest_route=\/wp\/v2\/posts\/120","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/dtp-soft.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/dtp-soft.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/dtp-soft.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/dtp-soft.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=120"}],"version-history":[{"count":5,"href":"http:\/\/dtp-soft.de\/index.php?rest_route=\/wp\/v2\/posts\/120\/revisions"}],"predecessor-version":[{"id":125,"href":"http:\/\/dtp-soft.de\/index.php?rest_route=\/wp\/v2\/posts\/120\/revisions\/125"}],"wp:attachment":[{"href":"http:\/\/dtp-soft.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=120"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dtp-soft.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=120"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dtp-soft.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=120"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}