Xamarin 表单后退按钮导航

Xamarin forms Back Button Navigation

我正在开发 Xamarin Forms 应用程序并使用 MVVM 设计。 问题是当我使用

导航到另一个页面时
Shell.Current.GoToAsync()

我禁用该按钮以防止创建多个页面或数据库操作。 但是如果我想返回,我会在 VM 构造函数中重新启用按钮,但是构造函数永远不会被调用,这意味着按钮仍然被禁用。 我试图在 Page 路由中附加 // 以删除堆栈,认为当我返回时它将创建一个新的实例 Page 和 VM,但这没有用。 所以任何人都可以帮我解决这个问题。 提前致谢。

更新: 虚拟机代码

 public RegisterViewModel()
{
    Debug.WriteLine("Class Constructor", Class_Name);
    //in case if disabled
    RegisterButtonEnabled = true;            
            
    RegisterCommand = new Command(RegisterButtonOnClick);
}


    public ICommand RegisterCommand { get; }

    private bool registerButtonEnabled = true;
    public bool RegisterButtonEnabled 
    { 
        get => registerButtonEnabled;
         set 
        { 
            registerButtonEnabled = value;
             OnPropertyChanged();
        } 
    }


private async void RegisterButtonOnClick()
{

    
         RegisterButtonEnabled = false;
        //More Code
        //and then go to Register Page
         await Shell.Current.GoToAsync(nameof(RegisterPage));
    
}

和我的xaml

<Button              
                Command="{Binding RegisterCommand}"
                Text="{xct:Translate Register}"
                Style="{StaticResource ButtonStyle}"
                IsEnabled="{Binding RegisterButtonEnabled,Mode=OneWay}"/>

我创建了一个默认的 shell 项目。并找到有关视图模型的信息。您可以将 onappear 和 ondisappear 方法添加到视图模型。如:

视图模型:

public void OnAppearing()
    {
      RegisterButtonEnabled = true;
    }
public void OnDisAppearing()
    {
      RegisterButtonEnabled = false;
    }

Page.cs

   ItemsViewModel _viewModel;

    public ItemsPage()
    {
        InitializeComponent();

        BindingContext = _viewModel = new ItemsViewModel();
    }
   protected override void OnAppearing()
    {
        base.OnAppearing();
        _viewModel.OnAppearing();
        
    }
    protected override void OnDisappearing()
    {
        base.OnDisappearing();
        _viewModel.OnDisAppearing();
    }