将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变量的状态时,标签没有得到刷新。我能做什么??
现在您的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}" />