118 lines
3.6 KiB
C#
118 lines
3.6 KiB
C#
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));
|
|
}
|
|
}
|
|
} |