首頁 > 後端開發 > C++ > 為什麼我的 XAML 綁定不更新我的依賴屬性?

為什麼我的 XAML 綁定不更新我的依賴屬性?

Mary-Kate Olsen
發布: 2025-01-09 21:05:42
原創
748 人瀏覽過

Why Isn't My XAML Binding Updating My Dependency Property?

使用相依性屬性排查 WPF XAML 綁定問題

本文解決了一個常見的 WPF 問題:當依賴項屬性變更時,XAML 資料綁定無法更新 UI,即使程式碼隱藏綁定工作正常。

場景:

WPF 應用程式在 XAML 中使用依賴屬性,但當綁定屬性的值變更時,綁定不會更新 UI。 然而,程式碼隱藏綁定可以按預期運行。

依賴屬性定義(不正確):

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

XAML 綁定(問題):

<code class="language-xaml"><TextBlock Text="{Binding Test}"></TextBlock></code>
登入後複製

解:

核心問題在於依賴屬性註冊和XAML綁定。 這是正確的方法:

修正的依賴屬性定義:

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

更正的 XAML 綁定:

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

此修正的 XAML 明確設定 RelativeSource 以尋找 UserControl 作為綁定來源。

重要注意事項:

  • 避免在 UserControl 建構子中設定 DataContext:DataContext 的建構子中設定 UserControl 可防止繼承父級的 DataContext,這通常會導致綁定失敗。

  • 替代方案:在程式碼隱藏中明確綁定: 如果使用 RelativeSource 不切實際,請在程式碼隱藏中明確設定綁定:

<code class="language-csharp">TheControl.SetBinding(MyControl.TestProperty, new Binding
{
    Source = DataContext, // Use the MainWindow's DataContext
    Path = new PropertyPath("MyText"),
    Mode = BindingMode.TwoWay
});</code>
登入後複製

透過執行這些步驟,您可以確保您的 XAML 綁定正確更新您的依賴項屬性,從而產生功能齊全且響應迅速的 WPF 應用程式。

以上是為什麼我的 XAML 綁定不更新我的依賴屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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