2009-12-21 70 views
5

我有一个自定义控件,它具有DependencyProperty MyAnimal - 我将ViewModel上的动物属性绑定到MyAnimal DependencyProperty。wpf如何判断数据绑定何时完成?

我在控件上粘贴了一个TextBox,所以我可以触发一个事件 - 每当我触发事件MyAnimal属性已设置 - 但是如果我在MyAnimal属性的Setter上放置一个断点,它永远不会被解雇!

我想我错过了一些关于WPF依赖属性/绑定的基础知识?

所以我的问题是,如果我不能使用Setter,我怎么能找出它的设置?如果我把如果我在InitializeComponent()之后放置了一个断点,并且我看了看Events a是否可以连接到 - DatabindingFinished或类似的东西?但看不到它会是什么...

任何人都可以协助吗?

感谢,

安迪

public partial class ControlStrip 
{ 
    public ControlStrip() 
    { 
     InitializeComponent(); 
    } 

    public Animal MyAnimal 
    { 
     get 
     { 
      return (Animal)GetValue(MyAnimalProperty); 
     } 
     set 
     { 
      SetValue(MyAnimalProperty, value); 
     } 
    } 

    public static readonly DependencyProperty MyAnimalProperty = 
     DependencyProperty.RegisterAttached("MyAnimal", typeof (Animal), typeof (ControlStrip)); 

    private void TextBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) 
    { 
     var myAnimal = MyAnimal; 
     MessageBox.Show(myAnimal.Name); 
    } 

} 
+1

一个问题 - 你为什么要使用RegisterAttached并没有注册?它似乎不应该是一个附加的属性,而是一个正常的DP ... – 2009-12-21 19:12:50

+0

这是一个很好的观点,欢呼 - 复制和粘贴! – 2009-12-21 19:24:35

回答

5

运行时永远不会调用setter方法。他们直接进入DependencyProperty。您需要为您对RegisterAttached()的调用添加一个附加参数。在那里你可以添加一个PropertyChangedCallback。

下面是一些示例代码:

public static readonly DependencyProperty MyAnimalProperty = 
    DependencyProperty.RegisterAttached("MyAnimal", typeof (Animal), typeof (ControlStrip), new PropertyMetadata(AnimalChanged)); 

private static void AnimalChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) 
{ 
    // Do work here 
} 
4

设置器仅可以供您使用 - 你其实完全可以离开酒店,关闭,因为数据绑定使用实际的DependencyProperty本身,而不是CLR属性。

如果您需要查看属性更改的时间,则需要在依赖项属性上指定PropertyMetadata,并提供PropertyChangedCallback

详情请看Dependency Property Metadata

相关问题