2009-07-13 3 views
52

읽기 전용 종속성 속성은 어떻게 만듭니 까? 그렇게하기위한 모범 사례는 무엇입니까?읽기 전용 종속성 속성을 만드는 방법은 무엇입니까?

구체적으로 무엇을 매개 변수로 System.Windows.DependencyPropertyKey 소요

DependencyObject.GetValue() 

전혀 구현이 없다는 사실은 나에게 가장입니다 유세입니다.

System.Windows.DependencyProperty.RegisterReadOnlyDependencyProperty 대신 D ependencyPropertyKey 개체를 반환합니다. 그렇다면 GetValue를 호출 할 수없는 경우 어떻게 읽기 전용 종속성 속성에 액세스해야합니까? 아니면 DependencyPropertyKey을 일반 old 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가 무엇인지 혼동 할 것이므로 업데이트 할 것입니다. – Developer