2014-02-10 77 views
0

我有这样定义为一个依赖属性的属性:依赖项属性和回调

public static readonly DependencyProperty HandleProperty = 
     DependencyProperty.Register("Handle", typeof(Int32?), typeof(SearchTextBox), new PropertyMetadata(HandleChangedHandler)); 
    public Int32? Handle 
    { 
     get { return (Int32?)GetValue(HandleProperty); } 
     set 
     { 
      SetValue(HandleProperty, value); 
     } 
    } 

    public static void HandleChangedHandler(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
    { 
     var self = (SearchTextBox) sender; 
     self.FindByHandle((Int32)e.NewValue);   
    } 

有了这个代码,该行从未执行

SetValue(HandleProperty, value); 

,但Handle属性被改变。

此属性的值设置在哪里?

为什么不简单地使用属性设置器来做到这一点?

+2

'为什么不简单地使用属性“set”来做到这一点?' - 这部分不清楚。你能否详细说明一下。 –

+0

我想知道如果我们可以使用setter来代替这个回调会更简单。 – Beetlejuice

+0

您仍然可以在setter中编写代码。但是只有当你从代码中设置它时才会调用它。根据XAML设计,XAML从不使用这些和这些。 –

回答

2

回答所有的问题可以找到here。我将在这里引用它的一部分:

其XAML处理器的当前WPF实现本质上是 依赖属性感知。当加载二进制XAML和处理属性依赖项属性时,WPF XAML处理器使用属性系统 方法处理依赖项属性。这有效地 绕过属性包装。当您实现自定义依赖关系 属性时,您必须考虑到此行为,并应避免 将其他代码放置在属性系统方法GetValue和SetValue以外的属性包装器中。

+1

好吧,我明白了。我现在使用OldValue和NewValue来确定属性更改。 – Beetlejuice