programing

WPF 연결 속성 데이터 바인딩

bestprogram 2023. 5. 7. 12:05

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

켄트의 답변에 대한 코멘트로 올리고 싶었지만, 제가 그렇게 할 충분한 담당자가 없기 때문에...WPF 4.5 기준으로 지적하고 싶었을 뿐입니다.Path=더 이상 필요하지 않습니다.그러나 첨부된 속성 이름은 여전히 괄호로 묶어야 합니다.

브래킷을 설치하면 작동합니다.부모의 자동화 ID 바인딩을 수행해야 했습니다.contentcontrol아주textblockdatatemplate자동화 ID는 연결된 속성입니다.

나는 자산을 괄호 안에 넣고 바인딩 작업을 했습니다.

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

언급URL : https://stackoverflow.com/questions/5832208/wpf-attached-property-data-binding