> 백엔드 개발 > C++ > WPF 사용자 컨트롤의 종속성 속성에 대해 내 XAML 바인딩이 작동하지 않는 이유는 무엇입니까?

WPF 사용자 컨트롤의 종속성 속성에 대해 내 XAML 바인딩이 작동하지 않는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-09 21:08:43
원래의
318명이 탐색했습니다.

Why Doesn't My XAML Binding Work on a Dependency Property in a WPF User Control?

WPF 사용자 컨트롤: 종속성 속성의 XAML 바인딩 문제

WPF 사용자 컨트롤의 XAML 내에서 종속성 속성에 바인딩하는 것은 까다로울 수 있습니다. 일반적인 시나리오를 살펴보겠습니다.

TextBlock을 사용한 사용자 제어:

<code class="language-xml"><UserControl ... x:Class="WpfTest.MyControl">
    <TextBlock Text="{Binding Test}" />
</UserControl></code>
로그인 후 복사

사용자 컨트롤의 종속성 속성:

<code class="language-csharp">public static readonly DependencyProperty TestProperty =
    DependencyProperty.Register(
        "Test",
        typeof(string),
        typeof(MyControl),
        new PropertyMetadata("DEFAULT"));

public string Test
{
    get { return (string)GetValue(TestProperty); }
    set { SetValue(TestProperty, value); }
}</code>
로그인 후 복사

MainWindow ViewModel(또는 DataContext):

<code class="language-csharp">private string _myText = "default";
public string MyText
{
    get { return _myText; }
    set { _myText = value; NotifyPropertyChanged(); }
}</code>
로그인 후 복사

MainWindow에서 바인딩(성공):

<code class="language-xml"><TextBlock Text="{Binding MyText}" /></code>
로그인 후 복사

사용자 컨트롤 바인딩(실패):

<code class="language-xml"><MyControl Test="{Binding MyText}" /></code>
로그인 후 복사

코드 숨김 바인딩(성공):

<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding
{
    Source = DataContext,
    Path = new PropertyPath("MyText"),
    Mode = BindingMode.TwoWay
});</code>
로그인 후 복사

근본 원인:

바인딩 소스가 명시적으로 정의되지 않았기 때문에 사용자 컨트롤 내의 XAML 바인딩이 실패합니다. 기본값은 사용자 컨트롤 자체 속성입니다.

해결책:

RelativeSource:

을 사용하여 바인딩 소스를 지정합니다.
<code class="language-xml"><UserControl ... x:Class="WpfTest.MyControl">
    <TextBlock Text="{Binding Test, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
</UserControl></code>
로그인 후 복사

이는 UserControl 속성에 대해 Test 유형의 조상을 검색하도록 바인딩에 명시적으로 지시합니다. 또는 데이터 컨텍스트가 창 수준에 있는 경우 AncestorType={x:Type Window}을 사용할 수 있습니다.

주요 고려 사항:

  • 사용자 컨트롤 생성자에서 DataContext 방지: 사용자 컨트롤 생성자 내에서 DataContext을 설정하는 것은 일반적으로 권장되지 않으며 바인딩 문제가 발생할 수 있습니다.
  • 명시적 코드 숨김 바인딩: 강력한 바인딩을 위해서는 위에 설명된 대로 코드 숨김에서 명시적으로 바인딩을 설정하는 것이 좋습니다. 이를 통해 더 많은 제어력과 명확성을 얻을 수 있습니다.

이러한 지침을 따르면 WPF 사용자 컨트롤 내의 종속성 속성에 안정적으로 바인딩할 수 있습니다.

위 내용은 WPF 사용자 컨트롤의 종속성 속성에 대해 내 XAML 바인딩이 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿