你如何创build一个只读的依赖属性?
你如何创build一个只读的依赖属性? 这样做的最佳做法是什么?
具体来说,最让我难受的是没有实现的事实
DependencyObject.GetValue()
这需要一个System.Windows.DependencyPropertyKey
作为参数。
System.Windows.DependencyProperty.RegisterReadOnly
返回一个D ependencyPropertyKey
对象而不是一个DependencyProperty
。 那么如果你不能对GetValue进行任何调用,你将如何访问你的只读依赖项属性? 或者你应该以某种方式将DependencyPropertyKey
转换成一个普通的旧的DependencyProperty
对象?
build议和/或代码将非常感谢!
这很容易,实际上(通过RegisterReadOnly ):
public class OwnerClass : DependencyObject // or DependencyObject inheritor { private static readonly DependencyPropertyKey ReadOnlyPropPropertyKey = DependencyProperty.RegisterReadOnly("ReadOnlyProp", typeof(int), typeof(OwnerClass), new FrameworkPropertyMetadata((int)0, 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 ... }
只有在私人/保护/内部代码中设置值时才使用密钥。 由于受保护的ReadOnlyProp
setter,这对你来说是透明的。