wpf如何判断数据绑定何时完成?
问题描述:
我有一个自定义控件,它具有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);
}
}
答
运行时永远不会调用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
}
答
设置器仅可以供您使用 - 你其实完全可以离开酒店,关闭,因为数据绑定使用实际的DependencyProperty本身,而不是CLR属性。
如果您需要查看属性更改的时间,则需要在依赖项属性上指定PropertyMetadata,并提供PropertyChangedCallback。
一个问题 - 你为什么要使用RegisterAttached并没有注册?它似乎不应该是一个附加的属性,而是一个正常的DP ... – 2009-12-21 19:12:50
这是一个很好的观点,欢呼 - 复制和粘贴! – 2009-12-21 19:24:35