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; namespace CtrEditor { public class MainViewModel : INotifyPropertyChanged { private double _zoomFactor = 1.0; public MainViewModel() { OpenWorkDirectoryCommand = new RelayCommand(OpenWorkDirectory); LoadImageCommand = new RelayCommand(LoadImage); } public string DirectorioTrabajo { get => EstadoPersistente.Instance.DirectorioTrabajo; set { if (value != null) { OnPropertyChanged(nameof(DirectorioTrabajo)); // Notificar el cambio de propiedad EstadoPersistente.Instance.DirectorioTrabajo = value; // Actualizar el estado persistente EstadoPersistente.Instance.GuardarEstado(); // Guardar el estado actualizado } } } 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 } } // Ejemplo de propiedad para gestionar el UserControl activo private UserControl _activeControl; public UserControl ActiveControl { get => _activeControl; set { _activeControl = value; OnPropertyChanged(); } } // Comando para cargar una imagen public ICommand LoadImageCommand { get; private set; } private void LoadImage() { // Implementar lógica de carga de imagen } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } public double ZoomFactor { get => _zoomFactor; set { _zoomFactor = value; OnPropertyChanged(); } } private double _offsetX = 0; private double _offsetY = 0; public double OffsetX { get => _offsetX; set { _offsetX = value; OnPropertyChanged(); } } public double OffsetY { get => _offsetY; set { _offsetY = value; OnPropertyChanged(); } } // Implementación de INotifyPropertyChanged... } }