我已经使用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");
}
和构造函数
中的MainPageViewModelpublic 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以保持其更新。