Почему свойство не вызывается на Binding в WPF? - PullRequest
2 голосов
/ 06 апреля 2010

Я не уверен, почему свойство не вызывается в Binding. Вот код:

<myusercontrol
Text ="{Binding Description, UpdateSourceTrigger=LostFocus,Mode=TwoWay, ValidatesOnDataErrors=True}" 
 IsReadOnly ="{Binding AllowEditing}"
/>

А вот свойство myUsercontrol IsReadOnly:

 public static DependencyProperty IsReadOnlyProperty = DependencyProperty.Register("IsReadOnly", typeof (bool),
                                                                                          typeof (
                                                                                              myusercontrol));


        public bool IsReadOnly
        {
            get
            {
                return ((bool) GetValue(IsReadOnlyProperty));
            }

            set
            {
                MessageBox.Show(value.ToString()); 
                SetValue(IsReadOnlyProperty, !value); 
                OnPropertyChanged("IsReadOnly");
            }
        }

Окно сообщения никогда не отображается! Любые идеи!

1 Ответ

5 голосов
/ 06 апреля 2010

Вы никогда не должны помещать логику в свои методы получения и установки свойств зависимостей, кроме вызовов GetValue и SetValue. Это очень важно, потому что привязка XAML будет проходить напрямую через вызовы GetValue и SetValue, а не через ваше свойство code-behind! Вот почему вы никогда не видите MessageBox. Лучшим подходом является добавление метода обратного вызова с использованием метода DependencyProperty.Register (существует перегрузка для добавления обратного вызова). Затем этот метод будет вызываться всякий раз, когда значение изменяется, и вы можете поместить свою логику туда.

Другой вопрос - почему вы используете OnPropertyChanged? Свойства зависимостей имеют встроенные уведомления об изменениях, вам никогда не придется вызывать OnPropertyChanged для них.

...