MainWindowViewModel.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System.Reactive;
  2. using System.Threading.Tasks;
  3. using MiniMvvm;
  4. namespace RenderDemo.ViewModels
  5. {
  6. public class MainWindowViewModel : ViewModelBase
  7. {
  8. private bool drawDirtyRects = false;
  9. private bool drawFps = true;
  10. private double width = 800;
  11. private double height = 600;
  12. public MainWindowViewModel()
  13. {
  14. ToggleDrawDirtyRects = MiniCommand.Create(() => DrawDirtyRects = !DrawDirtyRects);
  15. ToggleDrawFps = MiniCommand.Create(() => DrawFps = !DrawFps);
  16. ResizeWindow = MiniCommand.CreateFromTask(ResizeWindowAsync);
  17. }
  18. public bool DrawDirtyRects
  19. {
  20. get => drawDirtyRects;
  21. set => this.RaiseAndSetIfChanged(ref drawDirtyRects, value);
  22. }
  23. public bool DrawFps
  24. {
  25. get => drawFps;
  26. set => this.RaiseAndSetIfChanged(ref drawFps, value);
  27. }
  28. public double Width
  29. {
  30. get => width;
  31. set => this.RaiseAndSetIfChanged(ref width, value);
  32. }
  33. public double Height
  34. {
  35. get => height;
  36. set => this.RaiseAndSetIfChanged(ref height, value);
  37. }
  38. public MiniCommand ToggleDrawDirtyRects { get; }
  39. public MiniCommand ToggleDrawFps { get; }
  40. public MiniCommand ResizeWindow { get; }
  41. private async Task ResizeWindowAsync()
  42. {
  43. for (int i = 0; i < 30; i++)
  44. {
  45. Width += 10;
  46. Height += 5;
  47. await Task.Delay(10);
  48. }
  49. await Task.Delay(10);
  50. for (int i = 0; i < 30; i++)
  51. {
  52. Width -= 10;
  53. Height -= 5;
  54. await Task.Delay(10);
  55. }
  56. }
  57. }
  58. }