在XAML中綁定依賴屬性失敗,但在程式碼隱藏中卻能正常運作。
TestProperty
依賴屬性的宣告缺少nameof()
操作符,導致屬性名稱與XAML綁定路徑不符。 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中文網其他相關文章!