XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEToolBox

【WPF】XFE工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Windows;
using System.Windows.Controls;
using XFEToolBox.Tools.SpaceEngineers.ViewModels;

namespace XFEToolBox.Tools.SpaceEngineers.Views;

public partial class MainPage : UserControl
{
    private readonly bool initialize;
    private MainPageViewModel? ViewModel => DataContext as MainPageViewModel;

    public MainPage() : this(new MainPageViewModel(), true) { }

    // A supplied view model can be rendered without starting discovery, timers or game operations.
    public MainPage(object viewModel, bool initialize = false)
    {
        InitializeComponent();
        DataContext = viewModel;
        this.initialize = initialize;
        Loaded += OnLoaded;
        Unloaded += OnUnloaded;
        LogBox.TextChanged += OnLogChanged;
    }

    private async void OnLoaded(object sender, RoutedEventArgs e)
    {
        Loaded -= OnLoaded;
        if (initialize && ViewModel is { } vm) await vm.InitializeAsync();
    }

    private void OnLogChanged(object sender, TextChangedEventArgs e)
    {
        // Preserve the user's position when they have scrolled back through a long log.
        if (LogBox.VerticalOffset >= LogBox.ExtentHeight - LogBox.ViewportHeight - 40) LogBox.ScrollToEnd();
    }

    private async void OnUnloaded(object sender, RoutedEventArgs e)
    {
        Unloaded -= OnUnloaded;
        Loaded -= OnLoaded;
        LogBox.TextChanged -= OnLogChanged;
        if (initialize && ViewModel is { } vm) await vm.ShutdownAsync();
    }
}