Silverlight: когда доступно свойство зависимости? - PullRequest
0 голосов
/ 01 декабря 2010

Я устанавливаю свойство зависимости в XAML (Silverlight 4):

<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); }
    }

1 Ответ

2 голосов
/ 01 декабря 2010

Привязки не используют свойство Navigator. Вместо этого класс привязки напрямую обращается к полю NavigatorProperty типа DependencyProperty и устанавливает значение.

В своем коде вы можете выполнить OverrideMetadata для объекта NavigatorProperty. Создайте PropertyMetadata, который включает PropertyChangedCallback, и добавьте туда обработчик событий. Просто имейте в виду, что OverrideMetadata работает на всех экземплярах указанного вами типа, поэтому укажите самый низкий из них, который вам нужен (TopSearchBar, вероятно), и будьте осторожны.

Метод DependencyProperty.OverrideMetadata

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...