2017-07-13 71 views
0

当我点击按钮时,需要将数据从模态页面传输到主页面。但有些事情没有解决。如何将数据从模态窗体传输到主窗体? Xamarin.Forms

这是必要的,应该有行之后等到模态窗口关闭:

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

请帮助我。

+0

您可以将对象引用传递到ModalPage的构造函数中。然后在ModalPage中使用这个对象,修改它等等。在ModelPage关闭之后,MainPage(你称之为ModalPage)的方法将会得到结果。 这是最简单的解决方案之一。 – KamikyIT

回答

1

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

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 
+0

我添加了MessagingCenter(上面的代码)。但我做错了 - 它不起作用 –

+0

谢谢。我收到数据。 –

0

你尝试获取该日志时,认购方式叫你发送? 你确定它没有被叫?

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

相关问题