using System.ComponentModel; using System.Windows.Input; using System.Windows; using OperationControl.Views; using OperationControl.Helpers; using OperationControl.Models; namespace OperationControl.ViewModels { public class DockWindowViewModel : INotifyPropertyChanged { private readonly ConfigConexaoView _viewConfig; public DockWindowViewModel() { // 1) Cria a view do passo 1 _viewConfig = new ConfigConexaoView(); // 2) Escuta quando RedeOk && GnssOk mudar _viewConfig._vm.TudoOkChanged += OnTudoOkChanged; // 3) Conteúdo inicial CenterContent = _viewConfig; TopContent = null; BottomContent = null; // 4) Commands já usando CanGoBack / CanGoNext BackCommand = new RelayCommand(_ => GoBack(), _ => CanGoBack); NextCommand = new RelayCommand(_ => GoNext(), _ => CanGoNext); // 5) Estado inicial do Next (caso já venha tudo ok no boot) ConfigConexaoOk = _viewConfig._vm.TudoOk; } private void OnTudoOkChanged(bool ok) { ConfigConexaoOk = ok; // avisa bindings OnPropertyChanged(nameof(CanGoNext)); // força o WPF a reavaliar CanExecute dos botões CommandManager.InvalidateRequerySuggested(); } // ====== ESTADO ====== private bool _configConexaoOk; public bool ConfigConexaoOk { get => _configConexaoOk; set { if (_configConexaoOk != value) { _configConexaoOk = value; OnPropertyChanged(nameof(ConfigConexaoOk)); OnPropertyChanged(nameof(CanGoNext)); } } } public bool CanGoBack => false; // passo 1 não volta public bool CanGoNext => ConfigConexaoOk; // libera quando tudo ok // ====== CONTEÚDOS ====== private object _centerContent; public object CenterContent { get => _centerContent; set { _centerContent = value; OnPropertyChanged(nameof(CenterContent)); } } private object _topContent; public object TopContent { get => _topContent; set { _topContent = value; OnPropertyChanged(nameof(TopContent)); } } private object _bottomContent; public object BottomContent { get => _bottomContent; set { _bottomContent = value; OnPropertyChanged(nameof(BottomContent)); } } // ====== COMMANDS ====== public ICommand BackCommand { get; } public ICommand NextCommand { get; } private void GoBack() { // depois você implementa quando tiver passo 2/3 } private void GoNext() { if (!CanGoNext) return; // Aqui depois você troca para a próxima tela: // CenterContent = new FixacaoBaseView(); // e atualiza CanGoBack/CanGoNext conforme o step //System.Windows.MessageBox.Show("Avançou! Próximo passo: Fixação da Base (ainda vamos implementar)."); ((App)System.Windows.Application.Current).Shell.Dock?.Hide(); ((App)System.Windows.Application.Current).Shell.Main?.Show(); } // ====== INotifyPropertyChanged ====== public event PropertyChangedEventHandler PropertyChanged; private void OnPropertyChanged(string nome) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nome)); } } }