2016-11-09 12 views
0

Я создал класс поведения с свойством зависимости, которое я хочу привязать к элементу управления в своем представлении (XAML). Я использую MVVM, и мне нужно установить это вложенное свойство, привязав его к свойству в моей модели ViewModel, но оно не устанавливается. Вот упрощенная версия того, что я хочу сделать:Свойство Attached Behavior не установлено привязкой в ​​UWP

Класс поведения:

public static class TestBehavior 
{ 
    public static readonly DependencyProperty SomeStringProperty = 
     DependencyProperty.Register("SomeString", typeof(string), typeof(TestBehavior), new PropertyMetadata("")); 

    public static string GetSomeString(DependencyObject o) 
    { 
     return (string)o.GetValue(SomeStringProperty); 
    } 

    public static void SetSomeString(DependencyObject o, string value) 
    { 
     o.SetValue(SomeStringProperty, value); 
    } 

} 

XAML:

<TextBlock Text="{Binding ViewModelProperty}" local:TestBehavior.SomeString="{Binding ViewModelProperty}" /> 

Свойство "Текст" в TextBlock правильно связывает, но свойство «SomeString» поведения не имеет.

Интересно - если я «жестко закодирую» свойство поведения значение, которое оно получает. Например:

<TextBlock Text="{Binding TestValue}" local:TestBehavior.SomeString="Foo" /> <!-- This Works --> 

Любые идеи, почему привязка к свойству поведения не работает?

ответ

1

Что вы ожидаете от приложенного поведения?

Вы определяете, что прикрепленное свойство/не работает, установив точку останова в методах GetSomeString/SetSomeString? Если это так, это не будет работать с привязкой, поскольку методы Get/Set не вызывают при использовании привязки.

Если вы хотите, чтобы реагировать, когда вложенное свойство изменяется независимо от того, является ли это через связывание или нет, то используйте PropertyChangedCallback в PropertyMetadata указанных в Register вызова.

+0

Это точно, что я сделал (используя точки останова). Я добавил метод обратного вызова и выполнил его при привязке. Любая идея, почему методы Get/Set не выполняются при использовании привязок? –

+2

Это именно то, как привязывающая инфраструктура работает с зависимыми свойствами (обычными или прикрепленными). Я считаю, что это некоторая форма внутренней оптимизации. – ibebbs

+0

Я также считаю, что метод GetSomeString является всего лишь распространенным шаблоном для упрощения доступа вашего кода к свойству. Платформа просто устанавливает значения при привязке. –