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();
}
我正在开发 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();
}