2009-07-13 2 views
52

Как создать свойство зависимостей только для чтения? Каковы наилучшие методы для этого?Как создать свойство зависимостей только для чтения?

В частности, что топал меня больше всего тот факт, что нет реализации

DependencyObject.GetValue() 

, который принимает System.Windows.DependencyPropertyKey в качестве параметра.

System.Windows.DependencyProperty.RegisterReadOnly возвращает объект D ependencyPropertyKey, а не DependencyProperty. Итак, как вы должны получить доступ к свойству зависимости только для чтения, если вы не можете делать какие-либо вызовы GetValue? Или вы должны каким-то образом преобразовать DependencyPropertyKey в простой старый объект DependencyProperty?

Совет и/или код были бы высоко оценены!

ответ

113

Это просто, на самом деле (через 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, это прозрачно для вас.

+0

Это не заполненный код. – Developer

+1

@Singh, как вы подразумеваете «не завершено»? –

+0

Вы не упомянули Public Class OwnerClass. Если какой-либо новый разработчик увидит этот код, он смущает то, что OwnerClass So обновил. – Developer

Смежные вопросы