namespace Yw.WinFrmUI { /// /// 阀门视图 /// public class HydroValveViewModel : HydroLinkViewModel { /// /// /// public HydroValveViewModel() { } /// /// /// public HydroValveViewModel(Yw.Model.HydroValveInfo rhs, Yw.Model.HydroModelInfo hydroInfo) : base(rhs, hydroInfo) { this.Material = rhs.Material; this.UpdatePropStatus(nameof(this.Material), rhs, nameof(rhs.Material)); this.Diameter = rhs.Diameter; this.UpdatePropStatus(nameof(this.Diameter), rhs, nameof(rhs.Diameter)); this.MinorLoss = rhs.MinorLoss; this.UpdatePropStatus(nameof(this.MinorLoss), rhs, nameof(rhs.MinorLoss)); this.ValveType = HydroValveTypeHelper.GetTypeName(rhs.ValveType); this.UpdatePropStatus(nameof(this.ValveType), rhs, nameof(rhs.ValveType)); this.OpeningDegree = rhs.OpeningDegree; this.UpdatePropStatus(nameof(this.OpeningDegree), rhs, nameof(rhs.OpeningDegree)); this.ValveSetting = rhs.ValveSetting; this.UpdatePropStatus(nameof(this.ValveSetting), rhs, nameof(rhs.ValveSetting)); this.Vmo = rhs; UpdateValveSetting(); } /// /// 阀门状态 /// [Category("数据")] [DisplayName("阀门状态")] [Description("[默认]使用阀门设置;[开启]使用局阻系数")] [PropertyOrder(1003)] [Browsable(true)] [TypeConverter(typeof(HydroValveStatusConverter))] public override string LinkStatus { get; set; } /// /// 材料 /// [Category("数据")] [DisplayName("材料")] [PropertyOrder(2001)] [Browsable(true)] public string Material { get; set; } /// /// 直径 /// [Category("数据")] [DisplayName("直径")] [PropertyOrder(2002)] [Browsable(true)] [DisplayUnit("mm")] public double Diameter { get; set; } /// /// 局阻系数 /// [Category("数据")] [DisplayName("局阻系数")] [PropertyOrder(2003)] [Browsable(true)] public double MinorLoss { get; set; } /// /// 阀门类型 /// [Category("数据")] [DisplayName("阀门类型")] [PropertyOrder(2004)] [Browsable(true)] [TypeConverter(typeof(HydroValveTypeConverter))] public string ValveType { get; set; } /// /// 阀门开度 /// [Category("数据")] [DisplayName("阀门开度")] [PropertyOrder(2005)] [Browsable(true)] public double OpeningDegree { get; set; } /// /// 阀门设置 /// [Category("数据")] [DisplayName("阀门设置")] [PropertyOrder(2006)] [Browsable(true)] public string ValveSetting { get; set; } /// /// 压强设置 /// [Category("数据")] [DisplayName("压强设置")] [Display(Name = "压强设置(m)")] [DisplayUnit("m")] [HydroRealPro("ValveSetting")] [PropertyOrder(2007)] [Browsable(true)] public double? ValvePress { get; set; } /// /// 压强设置 /// [Category("数据")] [DisplayName("流量设置")] [Display(Name = "流量设置(m³/h)")] [DisplayUnit("m³/h")] [HydroRealPro("ValveSetting")] [PropertyOrder(2008)] [Browsable(true)] public double? ValveFlow { get; set; } /// /// 开度损失曲线 /// [Category("数据")] [DisplayName("开度损失曲线")] [HydroRealPro("ValveSetting")] [HydroCurvePro(HydroCurve.ValveOL, HydroCurveType.CurveOL)] [PropertyOrder(2009)] [Browsable(true)] public string ValveOL { get; set; } /// /// 水头损失曲线 /// [Category("数据")] [DisplayName("水头损失曲线")] [HydroRealPro("ValveSetting")] [HydroCurvePro(HydroCurve.ValveQL, HydroCurveType.CurveQL)] [PropertyOrder(2010)] [Browsable(true)] public string ValveQL { get; set; } /// /// 水头损失 /// [Category("计算结果")] [DisplayName("水头损失")] [Display(Name = "水头损失(m)")] [PropertyOrder(10003)] [DisplayUnit("m")] [HydroCalcuPro] [ShowEditor(false)] [Browsable(false)] public override double? CalcuHeadLoss { get; set; } /// /// 沿程损失 /// [Category("计算结果")] [DisplayName("沿程损失")] [Display(Name = "沿程损失(m)")] [PropertyOrder(10005)] [DisplayUnit("m")] [HydroCalcuPro] [ShowEditor(false)] [Browsable(false)] public override double? CalcuFrictionLoss { get; set; } /// /// /// [Browsable(false)] public new Yw.Model.HydroValveInfo Vmo { get; set; } /// /// 更新属性 /// public override void UpdateProperty() { base.UpdateProperty(); this.Material = this.Vmo.Material; this.UpdatePropStatus(nameof(this.Material), this.Vmo, nameof(this.Vmo.Material)); this.Diameter = this.Vmo.Diameter; this.UpdatePropStatus(nameof(this.Diameter), this.Vmo, nameof(this.Vmo.Diameter)); this.MinorLoss = this.Vmo.MinorLoss; this.UpdatePropStatus(nameof(this.MinorLoss), this.Vmo, nameof(this.Vmo.MinorLoss)); this.ValveType = HydroValveTypeHelper.GetTypeName(this.Vmo.ValveType); this.UpdatePropStatus(nameof(this.ValveType), this.Vmo, nameof(this.Vmo.ValveType)); this.OpeningDegree = this.Vmo.OpeningDegree; this.UpdatePropStatus(nameof(this.OpeningDegree), this.Vmo, nameof(this.Vmo.OpeningDegree)); this.ValveSetting = this.Vmo.ValveSetting; this.UpdatePropStatus(nameof(this.ValveSetting), this.Vmo, nameof(this.Vmo.ValveSetting)); UpdateValveSetting(); } /// /// /// public override void UpdateVmoProperty() { base.UpdateVmoProperty(); this.Vmo.Material = this.Material; this.Vmo.UpdatePropStatus(nameof(this.Vmo.Material), this, nameof(this.Material)); this.Vmo.Diameter = this.Diameter; this.Vmo.UpdatePropStatus(nameof(this.Vmo.Diameter), this, nameof(this.Diameter)); this.Vmo.MinorLoss = this.MinorLoss; this.Vmo.UpdatePropStatus(nameof(this.Vmo.MinorLoss), this, nameof(this.MinorLoss)); this.Vmo.ValveType = HydroValveTypeHelper.GetTypeCode(this.ValveType); this.Vmo.UpdatePropStatus(nameof(this.Vmo.ValveType), this, nameof(this.ValveType)); this.Vmo.OpeningDegree = this.OpeningDegree; this.Vmo.UpdatePropStatus(nameof(this.Vmo.OpeningDegree), this, nameof(this.OpeningDegree)); UpdateVmoValveSetting(); this.Vmo.ValveSetting = this.ValveSetting; this.Vmo.UpdatePropStatus(nameof(this.Vmo.ValveSetting), this, nameof(this.ValveSetting)); } //更新阀门设置 //使用vmo更新自身属性时,再度更新阀门设置的其他属性 private void UpdateValveSetting() { switch (this.Vmo.ValveType) { case Yw.Hydro.ValveType.PSV: { if (double.TryParse(this.ValveSetting, out double press)) { this.ValvePress = press; } } break; case Yw.Hydro.ValveType.PBV: { if (double.TryParse(this.ValveSetting, out double press)) { this.ValvePress = press; } } break; case Yw.Hydro.ValveType.PRV: { if (double.TryParse(this.ValveSetting, out double press)) { this.ValvePress = press; } } break; case Yw.Hydro.ValveType.FCV: { if (double.TryParse(this.ValveSetting, out double flow)) { this.ValveFlow = flow; } } break; case Yw.Hydro.ValveType.TCV: { this.ValveOL = this.ValveSetting; } break; case Yw.Hydro.ValveType.GPV: { this.ValveQL = this.ValveSetting; } break; default: break; } } //更新vmo阀门设置 //使用自身属性,更新vmo阀门设置 private void UpdateVmoValveSetting() { switch (this.Vmo.ValveType) { case Yw.Hydro.ValveType.PSV: { this.ValveSetting = this.ValvePress?.ToString(); } break; case Yw.Hydro.ValveType.PBV: { this.ValveSetting = this.ValvePress?.ToString(); } break; case Yw.Hydro.ValveType.PRV: { this.ValveSetting = this.ValvePress?.ToString(); } break; case Yw.Hydro.ValveType.FCV: { this.ValveSetting = this.ValveFlow?.ToString(); } break; case Yw.Hydro.ValveType.TCV: { this.ValveSetting = this.ValveOL; } break; case Yw.Hydro.ValveType.GPV: { this.ValveSetting = this.ValveQL; } break; default: break; } } } }