agrobot_base/AgroBase/OperationControl/ViewModels/DockWindowViewModel.cs

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));
}
}
}