How do you create a read-only dependancy property? What are the best-practices for doing so?
Specifically, what's stumping me the most is the fact that there's no implementation of
DependencyObject.GetValue()
that takes a System.Windows.DependencyPropertyKey
as a parameter.
System.Windows.DependencyProperty.RegisterReadOnly
returns a DependencyPropertyKey
object rather than a DependencyProperty
. So how are you supposed to access your read-only dependency property if you can't make any calls to GetValue? Or are you supposed to somehow convert the DependencyPropertyKey
into a plain old DependencyProperty
object?
Advice and/or code would be GREATLY appreciated!
To create new dependency property we need to follow the below procedure, Declare and register dependency property. For registered property set value using SetValue method and get value using GetValue method. Write a method to handle change done on dependency property.
A dependency property is a specific type of property where the value is followed by a keen property system which is also a part of the Windows Runtime App. A class which defines a dependency property must be inherited from the DependencyObject class.
Because it makes it obvious, that the value of this property cannot be changed after initialization.
It's easy, actually (via RegisterReadOnly):
public class OwnerClass : DependencyObject // or DependencyObject inheritor { private static readonly DependencyPropertyKey ReadOnlyPropPropertyKey = DependencyProperty.RegisterReadOnly( nameof(ReadOnlyProp), typeof(int), typeof(OwnerClass), new FrameworkPropertyMetadata(default(int), FrameworkPropertyMetadataOptions.None)); public static readonly DependencyProperty ReadOnlyPropProperty = ReadOnlyPropPropertyKey.DependencyProperty; public int ReadOnlyProp { get { return (int)GetValue(ReadOnlyPropProperty); } protected set { SetValue(ReadOnlyPropPropertyKey, value); } } //your other code here ... }
You use the key only when you set the value in private/protected/internal code. Due to the protected ReadOnlyProp
setter, this is transparent to you.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With