using CommunityToolkit.Mvvm.ComponentModel; using MembranePoreTester.Communication; using System.ComponentModel; using System.Runtime.CompilerServices; namespace MembranePoreTester.ViewModels { public class ViewModelBase : ObservableObject { public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } protected bool SetProperty(ref T field, T value, [CallerMemberName] string propertyName = null) { if (EqualityComparer.Default.Equals(field, value)) return false; field = value; OnPropertyChanged(propertyName); return true; } protected async Task WriteFloatAsync(ushort address, float value) { byte[] bytes = BitConverter.GetBytes(value); if (BitConverter.IsLittleEndian) Array.Reverse(bytes); ushort high = (ushort)((bytes[0] << 8) | bytes[1]); ushort low = (ushort)((bytes[2] << 8) | bytes[3]); await App.PlcService.WriteSingleRegisterAsync(address, high); await App.PlcService.WriteSingleRegisterAsync((ushort)(address + 1), low); } } }