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(SchemaModel model) : INotifyPropertyChanged { private SchemaModel _model = model ?? throw new ArgumentNullException(nameof(model)); private SchemaNode? _selectedRootElement; private SchemaNode? _selectedNode; 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)) return; _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)) return; _selectedRootElement = value; OnPropertyChanged(); OnPropertyChanged(nameof(VisibleRootElements)); } } public SchemaNode? SelectedNode { get => _selectedNode; set { if (EqualityComparer.Default.Equals(_selectedNode, value)) return; _selectedNode = value; OnPropertyChanged(); } } public IEnumerable VisibleRootElements => SelectedRootElement != null ? [SelectedRootElement] : RootElements; } }