我有一个自定义的依赖属性,如下所示:
public static readonly DependencyProperty MyDependencyProperty =
DependencyProperty.Register(
"MyCustomProperty", typeof(string), typeof(MyClass));
private string _myProperty;
public string MyCustomProperty
{
get { return (string)GetValue(MyDependencyProperty); }
set
{
SetValue(MyDependencyProperty, value);
}
}
现在我尝试在XAML中设置该属性
<controls:TargetCatalogControl MyCustomProperty="Boo" />
但DependencyObject中的setter永远不会被击中!虽然我将属性更改为常规属性而不是Dep Prop
答案 0 :(得分:17)
试试这个..
public string MyCustomProperty
{
get
{
return (string)GetValue(MyCustomPropertyProperty);
}
set
{
SetValue(MyCustomPropertyProperty, value);
}
}
// Using a DependencyProperty as the backing store for MyCustomProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty MyCustomPropertyProperty =
DependencyProperty.Register("MyCustomProperty", typeof(string), typeof(TargetCatalogControl), new UIPropertyMetadata(MyPropertyChangedHandler));
public static void MyPropertyChangedHandler(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
// Get instance of current control from sender
// and property value from e.NewValue
// Set public property on TaregtCatalogControl, e.g.
((TargetCatalogControl)sender).LabelText = e.NewValue.ToString();
}
// Example public property of control
public string LabelText
{
get { return label1.Content.ToString(); }
set { label1.Content = value; }
}
答案 1 :(得分:2)
除非您手动调用,否则不会。有一个属性更改的处理程序,您可以添加到DependancyProperty构造函数调用,以便在属性更改时得到通知。
调用此构造函数:
http://msdn.microsoft.com/en-us/library/ms597502.aspx
使用此构造函数创建的PropertyMetadata实例:
http://msdn.microsoft.com/en-us/library/ms557327.aspx
编辑:此外,您没有正确实现依赖属性。您的get
和set
应分别使用GetValue
和SetValue
,并且您不应该有一个类成员来存储该值。 DP的成员名称也应为{PropertyName}Property
,例如如果注册的MyCustomPropertyProperty
/ get
和媒体资源名称为set
,则为MyCustomProperty
。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms753358.aspx。
希望有所帮助。
答案 2 :(得分:1)
也许您正在使用MVVM,并覆盖View的DataContext?
如果这样做,那么更改MyCustomProperty的事件将在原始 DataContext上引发,而不是在新的ViewModel上引发。