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 HMIControlButtonVM? emptyButton; [ObservableProperty] private HMIControlButtonVM? fillButton; public MediaContainerVm() { sName = "No Name"; EmptyButton = new HMIControlButtonVM(); FillButton = new HMIControlButtonVM(); } public MediaContainerVm(IAdsManager adsManager, string variableName) { _adsManager = adsManager; _variableName = variableName; sName = "No Name"; EmptyButton = new HMIControlButtonVM(_adsManager, _variableName + ".stEmptyButton"); FillButton = new HMIControlButtonVM(_adsManager, _variableName + ".stFillButton"); _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() { EmptyButton?.Dispose(); EmptyButton = null; FillButton?.Dispose(); FillButton = null; _adsManager?.Deregister(_variableName + ".xEmpty", EmptyChanged); _adsManager?.Deregister(_variableName + ".xFull", FullChanged); _adsManager?.Deregister(_variableName + ".xOverload", OverloadChanged); } }