using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using XSDVisualiser.Models; namespace XSDVisualiser.Desktop.ViewModels { public class MainWindowViewModel : INotifyPropertyChanged { private SchemaModel _model; private SchemaNode? _selectedRootElement; public MainWindowViewModel(SchemaModel model) { _model = model ?? throw new ArgumentNullException(nameof(model)); } public event PropertyChangedEventHandler? PropertyChanged; private void OnPropertyChanged([CallerMemberName] string? name = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } public SchemaModel Model { get => _model; set { if (!ReferenceEquals(_model, value)) { _model = value ?? throw new ArgumentNullException(nameof(value)); OnPropertyChanged(); OnPropertyChanged(nameof(RootElements)); OnPropertyChanged(nameof(VisibleRootElements)); } } } public IEnumerable RootElements => _model?.RootElements ?? Enumerable.Empty(); public SchemaNode? SelectedRootElement { get => _selectedRootElement; set { if (!EqualityComparer.Default.Equals(_selectedRootElement, value)) { _selectedRootElement = value; OnPropertyChanged(); OnPropertyChanged(nameof(VisibleRootElements)); } } } public IEnumerable VisibleRootElements { get { if (SelectedRootElement != null) return new[] { SelectedRootElement }; return RootElements; } } } }