Wpf 如何在列表的任何项出现时更新视图模型属性<&燃气轮机;更新了吗?
我有一个领域模型毒蛇。BindableObject实现所有INotifyPropertyChanged接口。 简化模型:Wpf 如何在列表的任何项出现时更新视图模型属性<&燃气轮机;更新了吗?,wpf,binding,viewmodel,Wpf,Binding,Viewmodel,我有一个领域模型毒蛇。BindableObject实现所有INotifyPropertyChanged接口。 简化模型: public class Viper : BindableObject { public int CaseId { get; set; } public string SerialNumber { get; set; } private byte _status; public Byte Status { get {
public class Viper : BindableObject
{
public int CaseId { get; set; }
public string SerialNumber { get; set; }
private byte _status;
public Byte Status
{
get { return _status; }
set { SetField(ref _status, value, "Status"); }
}
private List<CasePersonnel> _personnel;
public List<CasePersonnel> Personnel
{
get { return _personnel; }
set { SetField(ref _personnel, value, "Personnel"); }
}
private List<CaseFluids> _caseFluidList;
public List<CaseFluids> CaseFluidsList
{
get { return _caseFluidList; }
set { SetField(ref _caseFluidList, value, "CaseFluidsList"); }
}
public List<Gauge> Gauges { get; set; }
}
我创建了一个参照Viper域模型的viewmodel,并添加了InAlarm属性:
public class ViperViewModel : BindableObject
{
#region Constructors
public ViperViewModel(Viper viper)
{
InstanceViper = viper;
}
#endregion
public Viper InstanceViper { get; set; }
private bool _inAlarm;
public virtual bool InAlarm
{
get { return _inAlarm; }
set { SetField(ref _inAlarm, value, "InAlarm"); }
}
}
我有一个要绑定到ViperViewModel的InAlarm属性(闪烁红色)的usercontrol边框。但是,如果InstanceViper.Gauge的任何ShowAlarm属性为true,我需要ViperViewModel.InAlarm属性为true。当应用程序从外部源接收数据时,该仪表属性将更新。当基础域模型的gauge.ShowAlarm属性之一设置为true时,如何/应该更新viewmodel的InAlarm属性?在
gauge
中创建事件处理程序事件,当ShowAlarm
更改时,您会引发该事件
使用public bool?
属性创建一个AlarmedEventArgs
订阅ViperViewModel
中的事件,触发时方法应设置InAlarm
。我需要单独订阅每个仪表对象的事件处理程序,还是可以一次订阅整个列表?创建所有仪表后,您可以运行foreach来附加方法处理程序。创建一个新事件只是为了ShowAlarm还是注册PropertyChanged事件更好,因为它已经被触发了?我明白了,所以设置字段会引发它?如果是这样,那么这将是可行的,并且可能是建议的。使用PropertyChanged
。是的,我遗漏了那部分。受保护的bool SetField(ref T field,T value,string propertyName){if(EqualityComparer.Default.Equals(field,value))返回false;field=value;OnPropertyChanged(propertyName);返回true;}每种类型您需要多少个?
public class ViperViewModel : BindableObject
{
#region Constructors
public ViperViewModel(Viper viper)
{
InstanceViper = viper;
}
#endregion
public Viper InstanceViper { get; set; }
private bool _inAlarm;
public virtual bool InAlarm
{
get { return _inAlarm; }
set { SetField(ref _inAlarm, value, "InAlarm"); }
}
}