首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF Bug 系列 (2):RadioButton 群組內自動取消選取導致 IsChecked 雙向綁定失效

     編輯:關於.NET

背景

WPF 相依性屬性 (DP) 設值來源多樣(Style、Animation、Binding、Trigger、直接賦值),優先級機制複雜。RadioButton 為實現單選,會自動將同群組其他項的 IsChecked 設為 False,但其內部設值方式導致綁定失效。

歷史演進

  • .NET 3.0:自動設值導致 Style/Template 失效
  • .NET 3.5:修正 Style/Template,但導致 Binding 失效
  • .NET 3.5 SP1:沿用 3.5 邏輯,**Binding 仍失效**

驗證範例:「為微軟選 CEO」

兩個 Person 物件 (Bill Gates, Steve Ballmer) 實作 INotifyPropertyChanged,IsCeo 屬性雙向綁定至兩個 RadioButton。

<RadioButton DataContext="{StaticResource First}" IsChecked="{Binding IsCeo}" Content="{Binding Name}" GroupName="ceo"/>
<RadioButton DataContext="{StaticResource Second}" IsChecked="{Binding IsCeo}" Content="{Binding Name}" GroupName="ceo"/>

觀察結果

  1. 啟動:無 CEO
  2. 選 Steve Ballmer → 輸出「Steve Ballmer is CEO」
  3. 改選 Bill Gates → 輸出「Steve Ballmer is not CEO」「Bill Gates is CEO」
  4. 再改選 Steve Ballmer → **無任何輸出,Bill Gates 的 IsCeo 未被設回 False,綁定已斷裂**

截圖:

結語

RadioButton 內部自動清除選取的實作方式破壞了雙向綁定,嚴重影響 MVVM 開發模式。開發者需改用單向綁定配合命令或行為 手動同步。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved