2010-11-30 7 views
0

XAML (Silverlight 4)에서 종속성 속성을 설정하고 있습니다.Silverlight : 종속성 속성은 언제 사용할 수 있습니까?

<my:TopSearchBar x:Name="topSearchBar" Grid.Row="0" Navigator="{Binding ElementName=navigationFrame}" HorizontalAlignment="Stretch" VerticalAlignment="Top" /> 

navigationFrame의 일부 탐색 이벤트에 등록해야합니다. 그러나 다음은 널 포인터 예외로 실패합니다.

 public TopSearchBar() 
    { 
     // Required to initialize variables 
     InitializeComponent(); 

     Loaded += new RoutedEventHandler(TopSearchBar_Loaded); 
    } 

    void TopSearchBar_Loaded(object sender, RoutedEventArgs e) 
    { 
     // Navigator is null 
     Navigator.Navigated += new NavigatedEventHandler(Navigated); 
    } 

이 이벤트 핸들러를 등록 할시기는 언제입니까? 나는 속성 설정자에서 그것을 시도했지만 그 중단 점은 결코 부딪치지 않았다 :

 public Frame Navigator 
    { 
     get { return GetValue(NavigatorProperty) as Frame; } 
     set { SetValue(NavigatorProperty, value); } 
    } 

답변

2

바인딩이 Navigator 속성을 사용하지 않습니다. 대신 바인딩 클래스는 DependencyProperty 유형의 NavigatorProperty 필드에 직접 액세스하여 값을 설정합니다.

코드 숨김 코드에서 NavigatorProperty 개체에 대해 OverrideMetadata를 수행 할 수 있습니다. PropertyChangedCallback을 포함하는 PropertyMetadata를 만들고 거기에 이벤트 처리기를 추가합니다. OverrideMetadata는 지정한 유형의 모든 인스턴스에서 작동하므로 필요한 최소 인스턴스 (TopSearchBar, 아마도)를 지정하고주의하십시오.

DependencyProperty.OverrideMetadata Method

관련 문제