gpt4 book ai didi

C# Xamarin Forms MessagingCenter 不更新项目通过

转载 作者:行者123 更新时间:2023-12-04 04:05:02 26 4
gpt4 key购买 nike

我正在使用 MessagingCenter 通过我的页面传递对象,从我的 LoginPage 到我的 MainPage。即使 object 已更新,当将它用于我的主页时,该对象似乎为空。

    public User sUser { get; set; }
public MainPage()
{
InitializeComponent();

MessagingCenter.Subscribe<LoginPage, User>(this, "currentUserMainPage", (obj, item) =>
{
sUser = item;
Debug.WriteLine("User updated from mainPage: " + sUser.firstName);
});

MasterBehavior = MasterBehavior.Popover;

MenuPages.Add((int)MenuItemType.Home, (NavigationPage)Detail);
}

当我在更改页面之前检查对象时,即使它不再为 null,它也会返回 null。

public async Task NavigateFromMenu(int id)
{
if (!MenuPages.ContainsKey(id))
{
switch (id)
{
case (int)MenuItemType.Profile:
if(sUser == null)
{
MenuPages.Add(id, new NavigationPage(new LoginPage(sUser)));
}
else
{
MenuPages.Add(id, new NavigationPage(new ProfilePage(sUser)));
}
break;
}
}
}

知道我在这里错过了什么吗?

编辑:这是来自 LoginPage 的调用

protected override async void OnAppearing()
{
base.OnAppearing();

try
{
//perform login
MessagingCenter.Send(this, "currentUserMainPage", aUser.User);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}

}

最佳答案

首先你可以查看MessageCenter文档:https://learn.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/messaging-center

订阅和发送消息时,我们需要保持参数的数量和类型相同。

例子如下:

发布消息: MessagingCenter.Send<MainPage, string>(this, "Hi", "John");

订阅消息:

MessagingCenter.Subscribe<MainPage, string>(this, "Hi", async (sender, arg) =>
{
await DisplayAlert("Message received", "arg=" + arg, "OK");
});

你会看到第一个参数是MainPage , 第二个是 string .都需要在发布或者订阅的时候设置。

另外,在不同页面或类之间使用MessageCenter,可以使用object替换或 MainPage .

因此,共享代码可以修改如下:

使用 object 订阅 MessageCenter :

MessagingCenter.Subscribe<object, User>(this, "currentUserMainPage", (obj, item) =>
{
sUser = item;
Debug.WriteLine("User updated from mainPage: " + sUser.firstName);
});

并发送消息也用 object :

MessagingCenter.Send<object,User>(this, "currentUserMainPage", aUser.User);

关于C# Xamarin Forms MessagingCenter 不更新项目通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62667064/

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