Introduction of the Dependency Property in WPF

No.of Views1518
Bookmarked0 times
Downloads 
Votes0
By  Dhananjay Kumar   On  16 Feb 2010 00:02:56
Tag : WPF , Utilities
This article will exaplain about Dependency Property in XAML and WPF.
emailbookmarkadd commentsprint

Images in this article missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at info@codegain.com

 

Introduction

 WPF introduces a new type of property called Dependency Property.

1. This Property is backed by WPF property system.
2. It is used for animation; enable styling, automatic data binding and more.
3. It depends upon multiple providers for determining its value at any point of time.
4. The biggest feature of Dependency Property is it’s built in ability to provide CHANGE NOTIFICATION.
5. Main motive behind adding Dependency Property is to enable rich functionality directly from declarative markup language.
6. The purpose of Dependency Property is to find value of property based on the value of other inputs.

The other input might be

• Style Themes
• User Preferences
• Just in time property determination
• Animation etc. 

Example:

There are 96 public properties of Button. Properties can be easily set in XAML without any procedural code. But without extra plumbing of Dependency Property, it would be hard for the simple action of setting properties to get the desired result without writing extra code.
The purpose of dependency properties is to provide a way to compute the value of a property based on the value of other inputs.Backing Object Property with Dependency Property , allowing to have support for Data Binding, Animation, Default Value, Styling etc.

Dependency Property supports Multiple Providers. In order to get final value of Dependency Property, these five steps have been run by WPF.

Step 1: Determine Base Value

The following provider set the base value for Dependency Property. They are here listed in order of their precedence (Highest to Lowest).

a. Local Value
b. Style Triggers
c. Template Triggers
d. Style setters
e. Theme Style Triggers
f. Theme Style Setters
g. Property Value Inheritance
h. Default value. 

Step 2: Evaluate

If the value from Step1 is an expression, then it is finally getting evaluated here. WPF converts an expression into a concrete value.

Step 3: Apply Animation

If any animations are running they can either replace or alter the value of Dependency Property.

Step 4: Coerce

WPF takes final Property value and pass it to CorecevalueCallBack delegate. This is to check, whether any custom logic is running to set the value of Dependency Property. The callback is responsible for returning new value based on custom logic. 

Step 5: Validate

Now final value is passed to ValidateValueCallBack delegate to check value is Valid or not. 

Example of Dependency Property
Let, there is a requirement to


a. Change Text color of Button with Mouse Hover.
b. When Mouse Enters, text color should be change to BLUE
c. When Mouse Leaves, text color changed back to BLACK.

 

So without special feature CHANGE NOTIFICATION of Dependency Property

Step 1:

Create XAML tag for Button with two events , like below 

<Window x:Class="WpfApplication2.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Window1" Loaded="Window_Loaded"Height="300" Width="300"><Grid><Button MouseEnter="Button_MouseEnter" MouseLeave="Button_MouseLeave"Height="100" Width="100"> Testing Button </Button></Grid></Window>

Here Button_MouseEnter and Button_MouseLeave is events.

Step 2:
Now there is need to write code at back end to handles these events. Code will look like as follows

private void Button_MouseEnter(object sender, MouseEventArgs e)
        {
 
            Button b = sender as Button;if (b != null)
            {
                b.Foreground = Brushes.Blue;
            }
        }private void Button_MouseLeave(object sender, MouseEventArgs e)
        {
            Button b = sender as Button;if (b != null)
            {
                b.Background = Brushes.Black;
            }
 
        }

Now to achieve above task, XAML can be easily used with Dependency Property.

<Window x:Class="WpfApplication2.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Window1" Loaded="Window_Loaded"Height="300" Width="300"><Grid><ButtonHeight="100" MinWidth="75" Margin="10"><Button.Style><Style TargetType="{x:Type Button}"><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Foreground" Value="Blue"/></Trigger></Style.Triggers></Style></Button.Style>OK</Button></Grid></Window>

Happy Coding. Thank you

 
Sign Up to vote for this article
 
About Author
 
Dhananjay Kumar
Occupation-Software Engineer
Company-Infosys Technolgies,Pune
Member Type-Gold
Location-India
Joined date-20 Jul 2009
Home Page-http://dhananjaykumar.net/
Blog Page-http://dhananjaykumar.net/
Dhananjay Kumar is Microsoft MVP on connected system. He blogs at http://dhananjaykumar.net/ . You can follow him http://twitter.com/debugmode_/ and reach him at dhananjay.25july@gmail.com
 
 
Other popularSectionarticles
Comments
There is no comments for this articles.
Leave a Reply
Title:
Display Name:
Email:
(not display in page for the security purphase)
Website:
Message:
Please refresh your screen using Ctrl+F5
If you can't read this number refresh your screen
Please input the anti-spam code that you can read in the image.
^ Scroll to Top