一. 綁定目標
將一個 WPF 的 TextBlock 與一個類的一個 int 類型靜態字段 Number 進行綁定,並且在這個 Number 為奇數的時候,在 TextBlock 中顯示奇數,偶數的時候顯示偶數。
二. 綁定思路
綁定的過程:
1. 新建一個類命名為 DemoClass,並在這個類中增加一個靜態字段 Number,代碼如下:
public class DemoClass { private int _number = 0; public int Number { get; set; } }
2. 在類中添加如下靜態事件
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
並修改 1 中代碼,代碼如下:
//添加命名空間 using System.ComponentModel; public class DemoClass { /// <summary> /// 為 System.ComponentModel.INotifyPropertyChanged.PropertyChanged 事件提供數據 /// </summary> public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged; private static int _number = 0; public static int Number { get { return _number; } set { _number = value; //通知 StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(nameof(Number))); } } }
3. 添加一個轉換器,代碼如下(這不是綁定必須的代碼):
//添加命名空間 using System.Globalization; using System.Windows.Data; /// <summary> /// 將數值輸出為奇偶數 /// </summary> public class OddAndEvenJudgeConverter : IValueConverter { /// <summary> /// 轉換器 /// </summary> public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { //判斷數據是否錯誤 if(value == null || !(value is int)) { return "數據錯誤"; } if ((int)value % 2 == 0) { return "偶數"; } else { return "奇數"; } } /// <summary> /// 不用管 /// </summary> public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } }
4. 添加 WPF 的 xaml 代碼中加入 TextBlock 和資源字典,代碼如下:
資源字典 xaml 代碼:
<Window.Resources> <local:DemoClass x:Key="demoClass"/> <local:OddAndEvenJudgeConverter x:Key="oddAndEvenJudgeConverter"/> </Window.Resources>
注:在剛寫完之后會出現 " 命名空間 clr-namespace:XXX 中不存在 XXX 名稱 ",只需要進行編譯之后就不會出現這個提示
TextBlock 的 xaml 代碼:
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="40" Text="{Binding Source={StaticResource demoClass},Path=Number,Converter={StaticResource oddAndEvenJudgeConverter}}"/>
此時的 WPF 設計器的顯示為下圖
6. 在類中 DemoClass 增加一個隨機數觸發 Timer,用於修改后台的 Number 的值,代碼如下:
//添加命名空間 using System.Timers; //DemoClass類中增加: /// <summary> /// 用來在后台修改 Number 的數值 /// </summary> private static Timer timer = null; /// <summary> /// 隨機數產生器 /// </summary> private static Random random = new Random(); static DemoClass() { timer = new Timer(2000); timer.Elapsed += (o, e) => { Number = random.Next(0, 100); }; timer.Start(); }
可以看到運行結果為中間的文字在 "奇數" 和 "偶數" 之間不斷的轉換。