using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows.Input; using Ookii.Dialogs.Wpf; using System.Windows.Input; using System.Collections.ObjectModel; using System.Windows.Media; using System.Windows.Media.Imaging; namespace CtrEditor { public class MainViewModel : INotifyPropertyChanged { public DatosDeTrabajo datosDeTrabajo { get; } public ObservableCollection listaImagenes { get; private set; } // Publicación de las claves del diccionario private string _selectedImage; // Evento que se dispara cuando se selecciona una nueva imagen public event EventHandler ImageSelected; public MainViewModel() { OpenWorkDirectoryCommand = new RelayCommand(OpenWorkDirectory); datosDeTrabajo = new DatosDeTrabajo(); listaImagenes = new ObservableCollection(datosDeTrabajo.Imagenes.Keys); directorioTrabajo = EstadoPersistente.Instance.directorio; } public string directorioTrabajo { get => EstadoPersistente.Instance.directorio; set { if (value != null) { EstadoPersistente.Instance.directorio = value; // Actualizar el estado persistente EstadoPersistente.Instance.GuardarEstado(); // Guardar el estado actualizado datosDeTrabajo.CargarImagenes(); listaImagenes = new ObservableCollection(datosDeTrabajo.Imagenes.Keys); // Actualizar claves OnPropertyChanged(nameof(directorioTrabajo)); // Notificar el cambio de propiedad OnPropertyChanged(nameof(listaImagenes)); // Notificar que la lista de imágenes ha cambiado } } } public string SelectedImage { get => _selectedImage; set { if (_selectedImage != value) { _selectedImage = value; OnPropertyChanged(nameof(SelectedImage)); ImageSelected?.Invoke(this, datosDeTrabajo.Imagenes[value]); // Dispara el evento con la nueva ruta de imagen } } } public ICommand OpenWorkDirectoryCommand { get; } private void OpenWorkDirectory() { var dialog = new VistaFolderBrowserDialog(); if (dialog.ShowDialog() == true) // Mostrar el diálogo y comprobar si el resultado es positivo { directorioTrabajo = dialog.SelectedPath; // Actualizar la propiedad que también actualiza el estado persistente } } // Implementación de INotifyPropertyChanged... public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } }