Program Tip

WPF 연결 속성 데이터 바인딩

programtip 2020. 11. 29. 12:10
반응형

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은 "TestProperty"가 아닌 속성 이름으로 "Test"를 전달해야합니다.


나는 이것을 Kent의 대답에 대한 주석으로 게시하는 것을 선호했지만 그렇게 할 충분한 담당자가 없기 때문에 ... WPF 4.5부터는 Path=더 이상 추가 할 필요가 없다는 것을 지적하고 싶었습니다 . 그러나 연결된 속성 이름은 여전히 ​​괄호로 둘러싸 야합니다.


괄호를 넣는 것이 작동합니다. 나는 부모의 바인딩 자동화 ID를해야했다 contentcontrolA를 textblock의를 datatemplate. 자동화 ID는 연결된 속성입니다.

속성을 대괄호로 묶고 바인딩이 작동했습니다.

AutomationProperties.AutomationId="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=ContentControl},Path=(AutomationProperties.AutomationId)}" 

참고 URL : https://stackoverflow.com/questions/5832208/wpf-attached-property-data-binding

반응형