Обратный вызов свойства зависимости не работает - PullRequest
2 голосов
/ 05 июля 2011

У меня есть следующий код:

private static readonly DependencyProperty IDProperty = DependencyProperty.Register(
           "ID", typeof(int), typeof(DetailDataControl), new PropertyMetadata(-1, new PropertyChangedCallback(IDChanged)));

    public int ID
    {
        get { return (int)GetValue(IDProperty); }
        set { SetValue(IDProperty, value); }
    }

    private static void IDChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
         // Do something here!  
    }

Я вижу, что когда я меняю ID, строка SetValue (называется IPproperty), но она не вызывает IDChanged.

Почему?

Ответы [ 3 ]

5 голосов
/ 05 июля 2011

Ваш код правильный, однако обратный вызов PropertyChanged не будет вызываться, пока он не изменится.Попробуйте изменить свойство на два разных значения в последовательных строках кода, и у вас будет точка останова, в которой вы увидите, что оно достигнуто.Я считаю, что он установлен в -1 и, следовательно, он не называется.

0 голосов
/ 20 мая 2016

Я не знаю, было ли это когда-либо решено или нет, но если вы устанавливаете значение в файле XAML, который его использует, существуют определенные обстоятельства, когда значение по умолчанию для кода процедуры будет иметь прецедент, и оно никогда не сработает установить в XAML изначально. Так что удалите значение по умолчанию -1, чтобы

private static readonly DependencyProperty IDProperty = DependencyProperty.Register(
           "ID", typeof(int), typeof(DetailDataControl), new PropertyMetadata(-1, new PropertyChangedCallback(IDChanged)));

становится

private static readonly DependencyProperty IDProperty = DependencyProperty.Register(
       "ID", typeof(int), typeof(DetailDataControl), new PropertyMetadata( new PropertyChangedCallback(IDChanged)));
0 голосов
/ 05 июля 2011

Сделать DP общедоступной статической только для чтения.При установке значения в XAML обертка не используется, DP используется напрямую.Итак, это должно быть публично.

Но ... очевидно, вы устанавливаете его изнутри кода?В таком случае, я не знаю, что не так ... но вы всегда можете попробовать.

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