WPF 如何綁定靜態字段


一. 綁定目標

將一個 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();
}

可以看到運行結果為中間的文字在 "奇數" 和 "偶數" 之間不斷的轉換。

三. 運行的結果

四. 項目工程

下載地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM