簡體   English   中英

C# Xamarin Forms 消息中心未更新項目已通過

[英]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,可以使用objectMainPage來代替。

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

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM