. net maui: MVVM如何使用shell导航捕获来自不同页面的返回



我已经使用Shell GoToAsync导航设置了一个主页-详细页面导航

[RelayCommand] 
public async void SelectionChanged() //Friend friend
{
if (SelectedItem == null) return;
Friend f = SelectedItem;
Console.WriteLine($"Selection made {f.FName} {f.LName}");
//navigate
var navigationParameter = new Dictionary<string, object>
{
{ "Friend", f }
};
await Shell.Current.GoToAsync(nameof(DetailPage), true, navigationParameter);
//remove selection highlight
SelectedItem = null;
}

这工作。然而,我在如何捕获返回的详细信息页在我的主页,因为我需要做我的CollectionView和底层sqlite数据存储的刷新茫然。

我大部分时间都在https://www.youtube.com/watch?v=pBh5SXVSwXw上观看Gerald Versluis的视频。

任何想法?

谢谢你,G

事实证明,这并不像看起来那么难。@ToolmakerSteve指出了一个解决方案,但当时我并不理解。解决方案是简单地使用MessagingCenter方法。文档https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/messagingcenter在用法上不是很清楚,但是根据https://codemilltech.com/messing-with-xamarin-forms-messaging-center/中的注释,我做了以下

在我的详细页面ViewModel和按钮返回到主页(不是后退按钮,我还没有捕获)。(使用MVVM助手版本8.0.0.0预览4(不是7,但可以改编),

[RelayCommand]
public async void ReturnMainPage()
{
MessagingCenter.Send(new MessagingMarker(), "IDidSomething");
}

和构造函数

中的MainPageViewModel
public MainPageViewModel()
{
...
MessagingCenter.Subscribe<MessagingMarker>(this, "IDidSomething", (s) => {
//do something in response to the detail page changing something
});
...
}

希望这对将来的人有所帮助。g .

另外有人能告诉我"this"指的是什么?这个页面吗?还有什么可以放在这里作为"this"呢?根据代码的位置可能不合适?

PS你也可以用这个来传递对象,看看我在。net Maui上的问题:如何从任何内容页(MVVM)读/写(获取/设置)一个全局对象

但我需要一些其他事件被提出时,我点击一些按钮并返回。

如果你想在返回时做一些事情,你可以使用BackButtonBehavior来实现。

如果您希望在单击某个按钮并返回时引发其他事件,您可以尝试以下代码:

await Shell.Current.GoToAsync("..");

和带有"…"也可以与route组合:

await Shell.Current.GoToAsync("../route");

更多信息,可以查看:

MessagingCenter已在。net 7中弃用,并在CommunityToolkit中被WeakReferenceMessenger所取代。Mvvm NuGet包。有关更多信息,请参见docs

在你的主页:

public class MessageModel() {
public string Message {get;set;}
}
public MasterPage() {
...
WeakReferenceMessenger.Default.Register<MessageModel>(this, (r, m) =>
{
// do something, reload view 
});
}

,当你回到你的详细页面:

MessageModel messagemodel = new() {
Message = "IDidSomething"
};
WeakReferenceMessenger.Default.Send(messagemodel);

您可以使用shell捕捉返回的动作。在本文档的末尾解释:https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/shell/navigation

您可以通过使用shell BackButtonBehavior并创建一个传递参数的命令来捕获返回操作,与导航到详细页面的方式相同。传递collectionview以保持其更新。

相关内容

  • 没有找到相关文章

最新更新