如何将模态窗体中的数据传输到主窗体中? Xamarin.Forms

问题描述 投票:0回答:2

当我点击按钮时,我需要将数据从模态页面传输到主页。但有些事情没有成功。

线后需要等待,直到模态窗口关闭:

await Navigation.PushModalAsync(modal);                         

主页:

string AncorName { get; set; }
Map map = new Map();

public MainPage() 
{
    AddCircle();
}

void AddCircle()
{
    map.MapClicked += async (sender, e) =>
    {
        Subscribe();
        var modal = new ModalPage();
        await Navigation.PushModalAsync(modal);

        var circle = CircleFactory.GetCircle(DataConfig.CENTER, AncorName); // AncorName = null
        map.Circles.Add(circle);

        circle.Clicked += (circleSender, ev) =>
        {
            var c = circleSender as Circle;
            DisplayAlert("Clicked on anchor", c.Tag as string, "Close");
        };
    };
}

void Subscribe() =>
    MessagingCenter.Subscribe<Page, string>(this, "AnchorsName", (sender, arg) =>
        AncorName = arg // data with modal page
    );

模态页面:

void OnClicked(object sender, EventArgs)
{
    MessagingCenter.Send(this, "AnchorsName", ancorName.Text); // my data
    await Navigation.PopModalAsync();
}

请帮助我。

c# xamarin.forms pagination
2个回答
2
投票

我建议使用MessagingCenter在页面之间发送数据。您的模态“发送”数据到“订阅”消息的第一页。

在这里您可以找到一些信息。

否则,将对象传递给“Modal”构造函数并修改它。当您关闭模态页面时,您应该在对象中找到修改后的数据。

您应该在 OnAppearing 中订阅并在 OnDisappearing 中取消订阅。

MessagingCenter.Subscribe<ModalPage, string>(this, "AnchorsName", (sender, arg) =>
    AncorName = arg // data with modal page
);

您可以尝试更改您的发送方式

MessagingCenter.Send<ModalPage, string>(this, "AnchorsName", ancorName.Text); // my data

0
投票

您是否尝试在调用订阅方法时获取日志? 确定没有被调用吗?

如果它被调用但你期望的事情没有发生。请尝试在调用 AncorName 的 getter 时使用 OnPropertyChanged() 。

© www.soinside.com 2019 - 2024. All rights reserved.