2017-07-13 86 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()。

相關問題