📄
src/App/Views/Panels/VasttrafikPanel.axaml.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System; using Avalonia; using Avalonia.Controls; using Avalonia.Data; using Avalonia.Data.Converters; using MMirror.App.ViewModels.Panels; namespace MMirror.App.Views.Panels; public partial class VasttrafikPanel : UserControl { public VasttrafikPanel() { InitializeComponent(); } protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) { base.OnAttachedToVisualTree(e); if (DataContext is VasttrafikPanelViewModel vm) { vm.SubscribeToUpdates(); } } protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e) { if (DataContext is VasttrafikPanelViewModel vm) { vm.UnsubscribeFromUpdates(); } base.OnDetachedFromVisualTree(e); } } public sealed class MinutesLeftBinding(BindingBase target) { public required BindingBase CurrentTime { get; set; } public object ProvideValue() => new MultiBinding() { Bindings = [target, CurrentTime], Converter = new FuncMultiValueConverter<DateTimeOffset, string>(times => { var minutesLeft = (int)double.Floor((times[0] - times[1]).TotalMinutes); return minutesLeft is 0 ? "Nu" : minutesLeft.ToString(); }), }; }