首頁 > 後端開發 > C++ > 為什麼我的 XAML 綁定不適用於 WPF 使用者控制項中的依賴屬性?

為什麼我的 XAML 綁定不適用於 WPF 使用者控制項中的依賴屬性?

Barbara Streisand
發布: 2025-01-09 21:08:43
原創
319 人瀏覽過

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>
登入後複製

主視窗視圖模型(或 DataContext):

<code class="language-csharp">private string _myText = "default";
public string MyText
{
    get { return _myText; }
    set { _myText = value; NotifyPropertyChanged(); }
}</code>
登入後複製

在主視窗中綁定(成功):

<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 使用者控制項中的依賴項屬性。

以上是為什麼我的 XAML 綁定不適用於 WPF 使用者控制項中的依賴屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板