Привязка данных вложенного свойства WPF



Я пытаюсь использовать привязку с вложенным свойством. Но не могу заставить его работать.



public class Attached
{
public static DependencyProperty TestProperty =
DependencyProperty.RegisterAttached("TestProperty", typeof(bool), typeof(Attached),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | FrameworkPropertyMetadataOptions.Inherits));

public static bool GetTest(DependencyObject obj)
{
return (bool)obj.GetValue(TestProperty);
}

public static void SetTest(DependencyObject obj, bool value)
{
obj.SetValue(TestProperty, value);
}
}


код XAML:



<Window ...>
<StackPanel local:Attached.Test="true" x:Name="f">
<CheckBox local:Attached.Test="true" IsChecked="{Binding (local:Attached.Test), Mode=TwoWay, RelativeSource={RelativeSource Self}}" />
<CheckBox local:Attached.Test="true" IsChecked="{Binding (local:Attached.Test), Mode=TwoWay}" />
</StackPanel>
</Window>


и ошибка привязки:



System.Windows.Data Error: 40 : BindingExpression path error: '(local:Attached.Test)' property not found on 'object' ''StackPanel' (Name='f')'. BindingExpression:Path=(local:Attached.Test); DataItem='StackPanel' (Name='f'); target element is 'CheckBox' (Name=''); target property is 'IsChecked' (type 'Nullable`1')
602   2  

2 ответов:

Верьте или нет, просто добавьте Path= и использовать скобки при привязке к вложенному свойству:

IsChecked="{Binding Path=(local:Attached.Test), Mode=TwoWay, RelativeSource={RelativeSource Self}}"

кроме того, ваш призыв к RegisterAttached должен пройти в "тест "в качестве имени свойства, а не"TestProperty".

Я бы предпочел опубликовать это как комментарий к ответу Кента, но поскольку у меня недостаточно репутации, чтобы сделать это... просто хотел отметить, что по состоянию на WPF 4.5, добавив Path= больше не надо. Однако имя вложенного свойства все еще должно быть заключено в круглые скобки.

Comments

    Ничего не найдено.