XAML에서는 바인딩 종속성 속성이 실패하지만 코드 숨김에서는 제대로 작동합니다.
TestProperty
종속성 속성 선언에 nameof()
연산자가 없어 속성 이름과 XAML 바인딩 경로가 일치하지 않습니다. 1. 종속성 속성을 올바르게 선언합니다
public static readonly DependencyProperty TestProperty = DependencyProperty.Register( nameof(Test), typeof(string), typeof(MyControl), new PropertyMetadata("DEFAULT"));
2. XAML에서 Bindings.RelativeSource 설정
<TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock>
3. 생성자에서 DataContext 할당을 삭제합니다.
UserControl 생성자에서 DataContext = this;
코드 줄을 제거합니다.
코드 숨김에서 바인딩 소스를 명시적으로 설정:
TheControl.SetBinding(MyControl.TestProperty, new Binding { Source = DataContext, ... });
XAML에서 암시적으로 바인딩 소스 설정:
<MyControl Test="{Binding MyText}"></MyControl>
XAML에서 암시적 바인딩 소스는 기본적으로 현재 DataContext로 설정되며 상위 창에서 올바르게 설정되어야 합니다. UserControl 생성자에서 DataContext를 설정하면 상속된 DataContext를 덮어쓰게 되어 바인딩이 실패하게 됩니다. 코드 숨김 바인딩에서 Source = DataContext
을 설정하면 바인딩 소스가 명시적으로 상속된 DataContext로 설정되어 바인딩이 유효한지 확인할 수 있습니다.
위 내용은 종속성 속성에 대한 XAML 바인딩이 실패하는데 코드 숨김이 작동하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!