EinmaleinsTrainer/ViewModels/MainWindowViewModel.cs
Naoriel Sa' Rocí 4a4fb54143 Added first code.
Signed-off-by: Naoriel Sa' Rocí <naoriel@sa-roci.de>
2026-03-30 02:26:31 +02:00

74 lines
2.1 KiB
C#

using ReactiveUI;
using System;
using System.Reactive.Linq;
namespace EinmaleinsTrainer.ViewModels;
public class MainWindowViewModel : ViewModelBase
{
private ViewModelBase _current;
public ViewModelBase Current
{
get => _current;
set => SetProperty(ref _current, value);
}
public readonly MainViewModel MainModel = new();
public readonly QuizViewModel QuizModel = new();
public readonly ResultViewModel ResultModel = new();
private readonly ViewModelBase _dummy = new();
public MainWindowViewModel()
{
MainModel.Init();
_current = MainModel;
ResultModel.RestartCommand
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(result =>
{
// In order to keep the last value if required
int secondsPerQuestion = MainModel.SecondsPerQuestion;
MainModel.Init();
if (result.TimeRequired != null)
{
MainModel.SecondsPerQuestion = (result.Score >= 10) ?
(int)Math.Round(0.15 * result.TimeRequired.Value.TotalSeconds, 0, MidpointRounding.AwayFromZero) :
secondsPerQuestion;
MainModel.UseTimer = true;
}
Current = MainModel;
});
QuizModel.Finished
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(result =>
{
ResultModel.Init(result);
Current = ResultModel;
});
QuizModel.RedrawRequired += (s, a) =>
{
Current = _dummy;
Current = QuizModel;
};
MainModel.StartCommand
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(quiz =>
{
if (quiz.Questions.Count == 0) return;
QuizModel.Init(quiz);
Current = QuizModel;
});
MainModel.RedrawRequired += (s, a) =>
{
Current = _dummy;
Current = MainModel;
};
}
}