gpt4 book ai didi

c# - 如何使用 MVVM light 处理 WP 8.1 上的后退按钮?

转载 作者:行者123 更新时间:2023-11-30 16:09:06 24 4
gpt4 key购买 nike

我正在寻找合适的方法来使用 MVVM light 5 上可用的 NavigationService 处理 Windows Phone 8.1 WinRT 上的后退按钮按下事件。

到目前为止,我认为最好的做法是在 ViewModelLocator 中注册 NavigationServiceGoBack 方法,同时在下面创建它NavigationService in MVVM Light V5 中概述的方法

这是一种有效的方法。但是,我无法在返回之前处理验证,所以我想知道是否有更合适的方法来处理此事件。

public class ViewModelLocator
{
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
// Register NavigationService
SimpleIoc.Default.Register(CreateNavigationService);
// Register ViewModels here
}

private INavigationService CreateNavigationService()
{
var navigationService = new NavigationService();
// Register pages here
navigationService.Configure("Details", typeof(DetailsPage));
// Handle back button
HardwareButtons.BackPressed += (sender, args) => {
navigationService.GoBack();
args.Handled = true;
};
return navigationService;
}
}

最佳答案

如果您在博文中了解 Marco 如何启用 OnNavigatedTo 和 OnNavigatedFrom 调用以传播到 ViewModel

Calling ViewModel methods in response to Page navigation events using MVVM Light in WinRT

您会注意到他使用 INavigable 接口(interface)以及 Activate 和 Deactivate 方法。您可以使用 AllowGoingBack 方法扩展该 INavigable 接口(interface),如下所示:

public interface INavigable
{
void Activate(object parameter);
void Deactivate(object parameter);
bool AllowGoingBack();
}

然后,每个与页面相关的 ViewModel 都可以根据上下文实现自己的 AllowGoingBack 方法。然后,在 View 的代码后面(这没问题,因为 View 可以知道 ViewModel)你可以覆盖 OnNavigatingFrom 并检查是否允许返回:

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
var navigableViewModel = this.DataContext as INavigable;

if (navigableViewModel != null)
{
if (e.NavigationMode == NavigationMode.Back && !navigableViewModel.AllowGoBack())
{
e.Cancel = true;
}
}
}

然后您的 ViewModel 将实现 INavigable,因此您将在 AllowGoingBack() 中定义验证代码,如果返回正常则返回 true,否则返回 false。

关于c# - 如何使用 MVVM light 处理 WP 8.1 上的后退按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28119593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com