The main reason to create DependencyProperty is when you write you own WPF control.
The main difference is, that the value of a normal .NET property is read directly from a private member in your class, whereas the value of a DependencyProperty is resolved dynamically when calling the GetValue() method that is inherited from DependencyObject.
Reduced memory:When you set a value of a dependency property it is not stored in a field of your object, but in a dictionary of keys and values provided by the base class DependencyObject. The key of an entry is the name of the property and the value is the value you want to set.
Dependency properties have a built-in change notification mechanism.
However in most situation, like in with the MVVM pattern, you don’t need dependency properties, INotifyPropertyChanged is enough.