namespace FluentTest.ViewModels { using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Timers; using System.Windows; using System.Windows.Input; using Fluent; using FluentTest.Commanding; #if MahApps_Metro #endif public class MainViewModel : ViewModel { private readonly Timer memoryTimer; private int boundSpinnerValue; private ColorViewModel colorViewModel; private FontsViewModel fontsViewModel; private GalleryViewModel galleryViewModel; private GallerySampleDataItemViewModel[] dataItems; private RelayCommand exitCommand; private double zoom; private ICommand testCommand; private IList manyItems; private IList stringItems; private bool? isCheckedToggleButton3 = true; private bool areContextGroupsVisible = true; public MainViewModel() { this.Zoom = 1.0; this.BoundSpinnerValue = 1; this.IsCheckedToggleButton3 = true; this.ColorViewModel = new ColorViewModel(); this.FontsViewModel = new FontsViewModel(); this.GalleryViewModel = new GalleryViewModel(); this.IssueReprosViewModel = new IssueReprosViewModel(); this.PreviewCommand = new RelayCommand(Preview); this.CancelPreviewCommand = new RelayCommand(CancelPreview); this.GroupByAdvancedSample = x => ((GallerySampleDataItemViewModel)x).Text.Substring(0, 1); this.memoryTimer = new Timer(TimeSpan.FromSeconds(5).TotalMilliseconds); this.memoryTimer.Elapsed += this.HandleMemoryTimer_Elapsed; this.memoryTimer.Start(); } #region Properties public long UsedMemory => GC.GetTotalMemory(true) / 1014; public double Zoom { get { return this.zoom; } set { if (value.Equals(this.zoom)) { return; } this.zoom = value; this.OnPropertyChanged(); } } public bool AreContextGroupsVisible { get => this.areContextGroupsVisible; set { if (value == this.areContextGroupsVisible) { return; } this.areContextGroupsVisible = value; this.OnPropertyChanged(); } } public ColorViewModel ColorViewModel { get { return this.colorViewModel; } private set { if (Equals(value, this.colorViewModel)) { return; } this.colorViewModel = value; this.OnPropertyChanged(); } } public FontsViewModel FontsViewModel { get { return this.fontsViewModel; } private set { if (Equals(value, this.fontsViewModel)) { return; } this.fontsViewModel = value; this.OnPropertyChanged(); } } public GalleryViewModel GalleryViewModel { get { return this.galleryViewModel; } private set { if (Equals(value, this.galleryViewModel)) { return; } this.galleryViewModel = value; this.OnPropertyChanged(); } } public IssueReprosViewModel IssueReprosViewModel { get; } /// /// Gets data items (uses as DataContext) /// public GallerySampleDataItemViewModel[] DataItems { get { return this.dataItems ?? (this.dataItems = new[] { GallerySampleDataItemViewModel.Create("Images\\Blue.png", "Images\\BlueLarge.png", "Blue", "Group A"), GallerySampleDataItemViewModel.Create("Images\\Brown.png", "Images\\BrownLarge.png", "Brown", "Group A"), GallerySampleDataItemViewModel.Create("Images\\Gray.png", "Images\\GrayLarge.png", "Gray", "Group A"), GallerySampleDataItemViewModel.Create("Images\\Green.png", "Images\\GreenLarge.png", "Green", "Group A"), GallerySampleDataItemViewModel.Create("Images\\Orange.png", "Images\\OrangeLarge.png", "Orange", "Group A"), GallerySampleDataItemViewModel.Create("Images\\Pink.png", "Images\\PinkLarge.png", "Pink", "Group B"), GallerySampleDataItemViewModel.Create("Images\\Red.png", "Images\\RedLarge.png", "Red", "Group B"), GallerySampleDataItemViewModel.Create("Images\\Yellow.png", "Images\\YellowLarge.png", "Yellow", "Group B"), }); } } public Func GroupByAdvancedSample { get; private set; } public IList ManyItems { get { return this.manyItems ?? (this.manyItems = GenerateStrings(5000)); } } public IList StringItems { get { return this.stringItems ?? (this.stringItems = GenerateStrings(25)); } } public bool? IsCheckedToggleButton3 { get { return this.isCheckedToggleButton3; } set { if (value == this.isCheckedToggleButton3) { return; } this.isCheckedToggleButton3 = value; this.OnPropertyChanged(); } } public ICommand PreviewCommand { get; private set; } public ICommand CancelPreviewCommand { get; private set; } public int BoundSpinnerValue { get { return this.boundSpinnerValue; } set { if (value == this.boundSpinnerValue) { return; } this.boundSpinnerValue = value; this.OnPropertyChanged(); } } #region Exit /// /// Exit from the application /// public ICommand ExitCommand { get { if (this.exitCommand is null) { this.exitCommand = new RelayCommand(Application.Current.Shutdown, () => this.BoundSpinnerValue > 0); } return this.exitCommand; } } #endregion public ICommand TestCommand { get { return this.testCommand ?? (this.testCommand = new RelayCommand(() => MessageBox.Show("Test-Command"))); } } #endregion Properties private static void Preview(GalleryItem galleryItem) { Trace.WriteLine($"Preview: {galleryItem}"); } private static void CancelPreview(GalleryItem galleryItem) { Trace.WriteLine($"CancelPreview: {galleryItem}"); } private static IList GenerateStrings(int count) { return Enumerable.Range(0, count) .Select(x => "Item " + (x + 1).ToString()) .ToList(); } private void HandleMemoryTimer_Elapsed(object sender, ElapsedEventArgs e) { this.OnPropertyChanged(nameof(this.UsedMemory)); } } }