为什么在WPF中没有调用绑定属性?

时间:2010-04-05 20:13:08

标签: wpf data-binding dependency-properties

我不确定为什么没有在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 个答案:

答案 0 :(得分:5)

除了GetValueSetValue调用之外,您不应该在依赖属性getter和setter中添加任何逻辑。这非常很重要,因为XAML绑定将直接通过GetValueSetValue调用,而不是通过代码隐藏属性!这就是你永远不会看到MessageBox的原因。更好的方法是使用DependencyProperty.Register方法添加回调方法(有一个重载来添加回调)。然后,只要值发生变化,就会调用该方法,并且可以将逻辑放在那里。

另一个问题 - 您为什么使用OnPropertyChanged?依赖属性内置了更改通知,您永远不必为它们调用OnPropertyChanged