如何将数据从模态转换为主? Xamarin.Forms

时间:2017-07-13 11:24:11

标签: c# xamarin.forms paging

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

必须在行之后等待,直到模态窗口关闭:

await Navigation.PushModalAsync(modal);                         

的MainPage:

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

ModalPage:

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

请帮帮我。

2 个答案:

答案 0 :(得分:2)

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

Here你可以找到一些信息。

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

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

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

您可以尝试更改发送方式

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

答案 1 :(得分:0)

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

如果它被调用,但你的预期没有发生。当AncorName的getter被调用时,请尝试使用OnPropertyChanged()。