2012-03-12 3 views
0

아래에서 볼 수있는 것처럼 사용자 정의 컨트롤 중 하나에 사용자 정의 속성을 설정하고 있습니다.로드시 종속성 속성 액세스

C#을

public static readonly DependencyProperty RuleType1 = DependencyProperty.Register 
    (
     "RuleType1", typeof(int), typeof(EmailNotification), new PropertyMetadata(0) 
    ); 

    public int RuleTypeId 
    { 
     get { return (int)GetValue(RuleType1); } 
     set { SetValue(RuleType1, value); } 
    } 

XAML

<helper:VisitationHours RuleTypeId="2" /> 

이 제외하고, 큰 노력하고, 내가 제어가로드 될 때까지 RuleTypeId을 얻을 수 없습니다. 항상 기본값 인 0으로 이동합니다. 컨트롤이로드 된 후 설정 한 값에 액세스 할 수 있습니다. 컨트롤의 생성자에서이 값에 어떻게 액세스합니까? 감사합니다

+1

XAML은 다음 작업을 수행하는 것과 같습니다.'새 VisitationHours() {RuleTypeId = 2};'. 'RuleTypeId'가 ctor를 통해 전송되지 않는 이니셜 라이저를 주목하십시오. 다른 경로를 시도하십시오. –

답변

2

첫째, 당신이 당신의 종속성 속성의 이름을 수정해야합니다 :

public static readonly DependencyProperty RuleTypeIdProperty = 
    DependencyProperty.Register("RuleTypeId", typeof(int), typeof(EmailNotification), new PropertyMetadata(0)); 

public int RuleTypeId 
{ 
    get { return (int)GetValue(RuleTypeIdProperty); } 
    set { SetValue(RuleTypeIdProperty, value); } 
} 

을 그리고, VisitationHours 당신의 속성을 설정하려는 사용자 컨트롤 인 경우, 대답은 당신이 단순히 수 없다 컨트롤의 생성자에있는 값에 액세스합니다. 개체가 먼저 생성 된 다음 속성이 WPF에 의해 설정됩니다.

OnInitialized을 무시하거나 속성 값에 액세스해야하는 코드의 Initialized 이벤트에 처리기를 연결할 수 있습니다.

+0

감사합니다. 나는 이벤트를 작성했습니다. – tier1

+0

'OnInitialized'에 대해 유용한 알림을 약간 수정했습니다 : 어떤 시나리오에서는'DependencyObject','DispatcherObject'와 다른 타입들이 그것을 선언하지 않았기 때문에 (적어도 예를 들어) 함수가 반드시'override'로 나타나지 않을 수도 있습니다 . 다행히도,'XamlObjectWriter' (및 다른 초기화/직렬화 인프라 스트럭쳐)가 찾는 기본적인 요구 사항은'ISupportInitialize'입니다. XAML 루트 객체 (해당 'Result')에서 해당 인터페이스 (또는 파생 된'ISupportInitializeNotification')가 감지되면 XamlObjectWriter는 적절히 'BeginInit'/EndInit을 호출합니다. –