[英]C# Xamarin Forms MessagingCenter not updating Item passed
我正在使用MessagingCenter
通過我的頁面傳遞對象,從我的 LoginPage 到我的 MainPage。 即使object
已更新,在我的主頁上使用它時,object 似乎是 null。
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);
}
當我在更改頁面之前檢查 object 時,即使它不再是 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://docs.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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.