2010-11-30 10 views
0

私は、XAML(Silverlightの4)で依存関係プロパティを設定しています:Silverlight:依存関係プロパティはいつ利用できますか?

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

私はnavigationFrameのいくつかのナビゲーションイベントを登録する必要があります。ただし、nullポインタ例外を指定すると、次のエラーが発生します。

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プロパティを使用しないでください。代わりに、バインディングクラスDependencyPropertyNavigatorPropertyフィールドに直接アクセスし、値を設定します。

コードでは、NavigatorPropertyオブジェクトでOverrideMetadataを実行できます。 PropertyChangedCallbackを含むPropertyMetadataを作成し、そこにイベントハンドラを追加します。 OverrideMetadataは指定したタイプのすべてのインスタンスで機能するので、必要なもの(TopSearchBar、おそらく)を指定してください。注意してください。

DependencyProperty.OverrideMetadata Method

関連する問題