我正在尝试将数据值绑定到附加属性。但是,它只是不能让它工作。
我将它定义为:
public static class MyClass
{
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.RegisterAttached("MyProperty", typeof(string),
typeof(MyClass), new PropertyMetadata(null));
public static string GetMyProperty(DependencyObject d)
{
return (string)d.GetValue(MyPropertyProperty);
}
public static void SetMyProperty(DependencyObject d, string value)
{
d.SetValue(MyPropertyProperty, value);
}
}
现在我使用它的XAML看起来像这样:
<TextBlock local:MyClass.MyProperty="{Binding MyStringValue}" />
我在SetMyProperty方法中设置断点,但从不调用它。它不会引发任何错误,它只是从未设置或要求。但是,如果我将XAML中的值更改为固定字符串,则会调用它:
<TextBlock local:MyClass.MyProperty="foobar" />
我错过了什么?
注意:上面的示例是显示相同奇怪行为的最小版本。当然,我的实际实现比这更有意义。
提前感谢任何暗示!
答案 0 :(得分:4)
绑定不会触发您的SetProperty - 如果您需要控制值何时更改,您必须使用期望“更改”-Handler
的覆盖PropertyMetadata
... new PropertyMetadata(
null,
new PropertyChangedCallback((sender, e) => {
var myThis = (MyClass)sender;
var changedString = (string)e.NewValue;
// To whatever you like with myThis ( = the sender object) and changedString (= new value)
})
答案 1 :(得分:0)
将SetMyProperty中第二个参数的类型更改为Object。
你将得到一个Binding对象,而不是String,作为那里的值。