将枚举值绑定到标签XAML

时间:2015-09-24 19:11:21

标签: c# wpf xaml enums

我正在使用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}}" />

我使用转换器(转换功能下方)

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变量的状态时,标签不会得到刷新。 我该怎么办?

1 个答案:

答案 0 :(得分:4)

现在你的用户界面无法知道任何事情已发生变化。

您需要使用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();
    } 
}

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

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