将Enum值绑定到Label XAML

本文关键字:Label XAML 绑定 Enum | 更新日期: 2023-09-27 18:14:30

我使用Enum字段来跟踪程序的状态。

public enum StatiMacchina {
        InAvvio = 1,
        Pronta = 2,
        InLavorazione = 3,
        InMovimento = 4,
        InAttesa = 5,
        InErrore = 6
}

我想绑定跟随字段的状态(在主窗口)

public StatiMacchina StatoMacchina { get; set; }

在XAML中带有标签。

<TextBlock Text="{Binding Path=StatoMacchina, Converter={StaticResource StatoMacchinaToString}}" />

我使用一个转换器(在Convert函数下面)

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
        switch ((StatiMacchina)value) {
            case StatiMacchina.InAvvio: return "txt1";
            case StatiMacchina.Pronta: return "txt2";
            case StatiMacchina.InLavorazione: return "txt3";
            case StatiMacchina.InMovimento: return "txt4";
            case StatiMacchina.InAttesa: return "txt5";
            case StatiMacchina.InErrore: return "txt6";
            default: return "Oppss";
        }
    }

当我的程序启动时,标签包含正确的值,但是当我更新StatoMacchina变量的状态时,标签没有得到刷新。我能做什么??

将Enum值绑定到Label XAML

现在您的UI无法知道任何更改。

您需要使用INotifyPropertyChaged。您应该从后面的代码中拉出属性,并将其放在ViewModel中,该ViewModel是窗口的DataContext。该ViewModel将实现接口INotifyPropertyChaged。以下是实现INotifyPropertyChaged所需的所有内容。

public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propName = null)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    }

你需要扩展属性的setter来设置值,然后触发OnPropertyChanged事件。就像. .

public StatiMacchina StatoMacchina { 
    get; 
    set{
       backingVariable = value;
       OnPropertyChanged();
    } 
}

这将触发一个事件,您的UI可以通过将xaml更改为This来侦听。

<TextBlock Text="{Binding Path=StatoMacchina, Converter={StaticResource StatoMacchinaToString}, UpdateSourceTrigger=PropertyChanged}" />