WP7:绑定到附加属性

时间:2011-08-22 18:13:27

标签: c# data-binding windows-phone-7 dependency-properties

我正在尝试将数据值绑定到附加属性。但是,它只是不能让它工作。

我将它定义为:

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" />

我错过了什么?

注意:上面的示例是显示相同奇怪行为的最小版本。当然,我的实际实现比这更有意义。

提前感谢任何暗示!

2 个答案:

答案 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,作为那里的值。