WP7: привязка к прикрепленным свойствам - PullRequest
1 голос
/ 22 августа 2011

Я пытаюсь привязать значение данных к присоединенному свойству. Однако, это просто не заставляет это работать.

Я определил это как:

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 ]

4 голосов
/ 22 августа 2011

И привязка не будет вызывать ваш SetMyProperty когда-либо - если вам требуется контроль при изменении значения, вы должны использовать переопределение PropertyMetadata , которое ожидает «Change» -Handler



... 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)
    })

0 голосов
/ 22 августа 2011

Измените тип второго аргумента в SetMyProperty на тип Object.

В качестве значения вы получите объект Binding, а не String.

...