如何将数据从模态形式传输到主要形式? Xamarin.Forms

How to transfer data from the modal form to the main? Xamarin.Forms

我需要在单击按钮时将数据从模态页面传输到主页面。但是有些事情没有解决。

必须在行后等待,直到模态window关闭:

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();
}

请帮帮我。

我建议使用MessagingCenter在页面之间发送数据。你的模态 "Send" 数据到你的第一个页面 "subscribe" 一条消息。

Here你可以找到一些信息。

否则,将一个对象传递给"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

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

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