ドメイン モデル Viper があります。BindableObject は、すべての INotifyPropertyChanged インターフェイスを実装します。単純化されたモデル:
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; }
}
Gauges は、次のタイプのリストです。
public class Gauge : BindableObject
{
public int GaugeId { get; set; }
public int ChannelId { get; set; }
public string Units { get; set; }
public string Code { get; set; }
private double? _value;
public double? Value
{
get { return _value; }
set { SetField(ref _value, value, "Value"); }
}
private bool? _showAlarm;
public bool? ShowAlarm
{
get { return _showAlarm; }
set { SetField(ref _showAlarm, value, "ShowAlarm"); }
}
public DateTime? TimeStamp { get; set; }
public double? Minimum { get; set; }
public double? Maximum { get; set; }
}
Viper ドメイン モデルを参照し、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 プロパティにバインドする (赤く点滅する) ユーザー コントロールの境界線があります。ただし、InstanceViper.Gauge の ShowAlarm プロパティのいずれかが true の場合、ViperViewModel.InAlarm プロパティを true にする必要があります。このゲージ プロパティは、アプリケーションが外部ソースからデータを受け取ると更新されます。基になるドメイン モデルの Gauge.ShowAlarm プロパティの 1 つが true に設定されたときに、ビューモデルの InAlarm プロパティを更新するにはどうすればよいですか?