C# MAUI 物理返回键 向上一级Page 通过ViewModel传递参数
时间: 2024-12-13 21:25:01 浏览: 5
在C# MAUI (Microsoft UI XAML) 中,当用户按下物理返回键并希望回到上一级页面时,通常会涉及处理导航以及在ViewModel层之间传递数据。这里是一个简单的示例:
首先,在你的ViewModel中,你可以创建一个方法来处理返回操作,并接收需要传递的参数。例如,如果你有一个`MainViewModel`:
```csharp
public class MainViewModel : INotifyPropertyChanged
{
public object向上级传递的数据 { get; set; }
public void OnBackButtonPress()
{
// 上下文服务获取当前活动的NavigationStack
NavigationManager navigation = MauiApp.Current.MainPage.Navigation;
// 如果有下一个页面并且数据存在,则传递数据
if (navigation.CanGoBack && data != null)
{
// 创建一个新的参数对象,用于传递到上一级页面的ViewModel
var paramsObject = new BackParams { Data = 数据 };
// 调用上一级页面的对应方法,传递这个参数
navigation.GoBackAsync(navigationArgs => NavigateToPreviousPage(paramsObject));
}
}
private async void NavigateToPreviousPage(BackParams backParams)
{
// 获取上一级页面对应的ViewModel类型和实例
Type prevViewModelType = typeof(YourPreviousViewModel);
YourPreviousViewModel prevViewModel = (YourPreviousViewModel)Activator.CreateInstance(prevViewModelType);
// 将数据设置给上一级的ViewModel
prevViewModel.YourProperty = backParams.Data;
// 设置新的视图模型并导航回上一级
await MauiShell.Current.ChangeRootAsync(prevViewModel, "YourViewName");
}
// ...其他代码...
// INotifyPropertyChanged 用以通知属性变化
public event PropertyChangedEventHandler PropertyChanged;
}
```
在上面的代码中,你需要自定义`BackParams`类来封装你要传递的数据,以及`YourPreviousViewModel`类来接收和处理这些数据。
阅读全文