📄 src/App/Views/Panels/DateTimePanel.axaml.cs
using System;
using System.Globalization;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Data.Converters;
using Avalonia.Media.Transformation;
using MMirror.App.ViewModels.Panels;

namespace MMirror.App.Views.Panels;

public partial class DateTimePanel : UserControl
{
    public DateTimePanel()
    {
        InitializeComponent();
    }

    protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
    {
        base.OnAttachedToVisualTree(e);

        if (DataContext is DateTimePanelViewModel vm)
        {
            vm.SubscribeToUpdates();
        }
    }

    protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e)
    {
        if (DataContext is DateTimePanelViewModel vm)
        {
            vm.UnsubscribeFromUpdates();
        }

        base.OnDetachedFromVisualTree(e);
    }
}

public class TranslateXConverter : IValueConverter
{
    public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture)
    {
        if (value is not double x)
        {
            return value;
        }

        var builder = TransformOperations.CreateBuilder(1);
        builder.AppendTranslate(x, 0);
        return builder.Build();
    }

    public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
    {
        if (
            value
            is not TransformOperations
            {
                Operations: [
                    TransformOperation { Type: TransformOperation.OperationType.Translate, Matrix: var matrix },
                ]
            }
        )
        {
            return value;
        }

        return matrix.M31;
    }
}