首頁 > 後端開發 > C++ > 為什麼我的 XAML 綁定到依賴屬性失敗,但程式碼隱藏卻有效?

為什麼我的 XAML 綁定到依賴屬性失敗,但程式碼隱藏卻有效?

DDD
發布: 2025-01-09 20:52:43
原創
540 人瀏覽過

Why Is My XAML Binding to a Dependency Property Failing, But Code-Behind Works?

XAML綁定依賴屬性失敗

問題

在XAML中綁定依賴屬性失敗,但在程式碼隱藏中卻能正常運作。

原因

  1. 依賴屬性宣告錯誤: TestProperty依賴屬性的宣告缺少nameof()操作符,導致屬性名稱與XAML綁定路徑不符。
  2. XAML中的綁定來源錯誤: XAML綁定中未明確設定綁定來源(DataContext),因此預設為UserControl自身,而不是從父視窗繼承的DataContext。
  3. 在建構子中設定DataContext: 在UserControl的建構子中設定DataContext屬性會阻止繼承父級的DataContext,導致綁定來源無效。

解決方法

1. 正確宣告依賴屬性

<code class="language-csharp">public static readonly DependencyProperty TestProperty =
    DependencyProperty.Register(
        nameof(Test),
        typeof(string),
        typeof(MyControl),
        new PropertyMetadata("DEFAULT"));</code>
登入後複製

2. 在XAML設定Bindings.RelativeSource

<code class="language-xml"><TextBlock Text="{Binding Test,
    RelativeSource={RelativeSource AncestorType=UserControl}}"></TextBlock></code>
登入後複製

3. 刪除建構子中的DataContext賦值

從UserControl建構函式中刪除DataContext = this;這行程式碼。

附加說明

在程式碼隱藏中明確設定綁定來源:

<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding
{
    Source = DataContext,
    ...
});</code>
登入後複製

在XAML中隱式設定綁定來源:

<code class="language-xml"><MyControl Test="{Binding MyText}"></MyControl></code>
登入後複製

在XAML中,隱式綁定來源預設為目前DataContext,應由父視窗正確設定。在UserControl的建構子中設定DataContext會覆寫繼承的DataContext,導致綁定失敗。 透過在程式碼隱藏綁定中設定Source = DataContext,綁定來源明確設定為繼承的DataContext,確保綁定有效。

以上是為什麼我的 XAML 綁定到依賴屬性失敗,但程式碼隱藏卻有效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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