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') 

信不信由你,只要添加Path=并在绑定到附属属性时使用括号:

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

另外,您对RegisterAttached的调用应该通过“Test”作为属性名称,而不是“TestProperty”。

我宁愿发表这个评论肯特的答案,但因为我没有足够的代表这样做…只是想指出,从WPF 4.5,添加Path=是没有必要了。 但是附加的属性名称仍然需要用圆括号包装。