using CommunityToolkit.Mvvm.ComponentModel; using System.ComponentModel.DataAnnotations; using TwinCAT.TypeSystem; using Heisig.HMI.AdsManager; using HMIToolkit; namespace Common; public sealed partial class MediaContainerVm : ObservableValidator, IDisposable { private IAdsManager? _adsManager; private string? _variableName; [ObservableProperty] private string? sName = "No Name"; [ObservableProperty] private bool empty = false; [ObservableProperty] private bool full = false; [ObservableProperty] private bool overload = false; [ObservableProperty] private BinaryValveControlVM? fillValveControlVm; [ObservableProperty] private BinaryValveControlVM? drainValveControlVm; [ObservableProperty] private BinaryValveControlVM? pumpValveControlVm; public MediaContainerVm() { sName = "No Name"; FillValveControlVm = new(); DrainValveControlVm = new(); PumpValveControlVm = new(); } public MediaContainerVm(IAdsManager adsManager, string variableName) { _adsManager = adsManager; _variableName = variableName; sName = "No Name"; FillValveControlVm = new BinaryValveControlVM(_adsManager, _variableName + ".stFillingValve"); DrainValveControlVm = new BinaryValveControlVM(_adsManager, _variableName + ".stDrainValve"); PumpValveControlVm = new BinaryValveControlVM(_adsManager, _variableName + ".stPumpValve"); _adsManager.Register(_variableName + ".xEmpty", EmptyChanged); _adsManager.Register(_variableName + ".xFull", FullChanged); _adsManager.Register(_variableName + ".xOverload", OverloadChanged); } private void EmptyChanged(object? sender, ValueChangedEventArgs e) { Empty = (bool)e.Value; } private void FullChanged(object? sender, ValueChangedEventArgs e) { Full = (bool)e.Value; } private void OverloadChanged(object? sender, ValueChangedEventArgs e) { Overload = (bool)e.Value; } public void Dispose() { FillValveControlVm?.Dispose(); DrainValveControlVm?.Dispose(); PumpValveControlVm?.Dispose(); FillValveControlVm = null; DrainValveControlVm = null; PumpValveControlVm = null; _adsManager?.Deregister(_variableName + ".xEmpty", EmptyChanged); _adsManager?.Deregister(_variableName + ".xFull", FullChanged); _adsManager?.Deregister(_variableName + ".xOverload", OverloadChanged); } }