如何创建只读依赖属性?这样做的最佳做法是什么?
具体来说,最让我感到困惑的是没有实施
的事实DependencyObject.GetValue()
以System.Windows.DependencyPropertyKey
作为参数。
System.Windows.DependencyProperty.RegisterReadOnly
返回D ependencyPropertyKey
对象而不是DependencyProperty
。那么如果你不能对GetValue进行任何调用,你应该怎么访问你的只读依赖属性?或者你应该以某种方式将DependencyPropertyKey
转换为普通的DependencyProperty
对象?
建议和/或代码将非常感激!
答案 0 :(得分:134)
实际上很简单(通过RegisterReadOnly):
public class OwnerClass : DependencyObject // or DependencyObject inheritor
{
private static readonly DependencyPropertyKey ReadOnlyPropPropertyKey
= DependencyProperty.RegisterReadOnly("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 ...
}
只有在private / protected / internal代码中设置值时才使用密钥。由于受保护的ReadOnlyProp
设置器,这对您来说是透明的。