我有一个自定义控件,它有一个DependencyProperty MyAnimal - 我将ViewModel上的Animal属性绑定到MyAnimal DependencyProperty。
我在控件上粘贴了一个TextBox,所以我可以触发一个事件 - 每当我触发事件时MyAnimal属性已被设置 - 但是如果我在MyAnimal属性的Setter上放置一个断点,它永远不会被触发!
我想我错过了一些关于WPF依赖属性/绑定的基本内容?!
所以我的问题是,如果我不能使用Setter,我怎么能知道它何时被设置?如果我把如果我在InitializeComponent()之后放置一个断点,那么我看看是否有一个事件可以挂钩--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);
}
}
答案 0 :(得分: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
}
答案 1 :(得分:4)
setter仅供您使用 - 您实际上可以完全关闭该属性,因为DataBinding使用实际的DependencyProperty本身,而不是CLR属性。
如果您需要查看属性何时更改,则需要在依赖项属性上指定PropertyMetadata,并提供PropertyChangedCallback。
有关详细信息,建议您阅读Dependency Property Metadata。