75

如何创建只读依赖属性?这样做的最佳做法是什么?

具体来说,最让我难过的是没有实现

DependencyObject.GetValue()  

以 aSystem.Windows.DependencyPropertyKey作为参数。

System.Windows.DependencyProperty.RegisterReadOnly返回一个 DependencyPropertyKey对象而不是一个DependencyProperty. 那么,如果您不能对 GetValue 进行任何调用,您应该如何访问您的只读依赖项属性呢?还是您应该以某种方式将其DependencyPropertyKey转换为普通的旧DependencyProperty对象?

建议和/或代码将不胜感激!

4

1 回答 1

156

实际上,这很容易(通过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 ...
}

仅当您在私有/受保护/内部代码中设置值时才使用密钥。由于受保护的ReadOnlyProp设置器,这对您来说是透明的。

于 2009-07-13T23:11:06.050 回答