2017-07-13 9 views
0

ボタンをクリックすると、モーダルページからメインページにデータを転送する必要があります。しかし、何かがうまくいかない。モーダルフォームからメインにデータを転送するにはどうすればいいですか? Xamarin.Forms

それはモーダルウィンドウが閉じられるまで行の後にそこに待つべきであることが必要である:

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

ModalPage:

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

私を助けてください。

+0

オブジェクト参照をModalPageのコンストラクタに渡すことができます。次にModalPageでこのオブジェクトを操作し、それを変更します。そして、ModelPageが閉じられた後、MainPageのメソッド(ModalPageを呼び出した場所)が結果を返します。 これは最も簡単な解決策の1つです。 – KamikyIT

答えて

1

MessagingCenterを使用してページ間でデータを送信することをお勧めします。あなたのモーダル "Send"データを最初のページに送り、メッセージを購読します。

Hereいくつかの情報があります。

それ以外の場合は、オブジェクトを「モーダル」コンストラクタに渡して変更します。モーダルページを閉じると、オブジェクトに変更されたデータが見つかります。

OnDearingでOnAppearingとUnsubscribeを購読する必要があります。あなたは

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

私はMessagingCenterを追加しました(上記のコード)。しかし、私は間違って何かをした - それは動作しません –

+0

ありがとう。私はデータを取得します。 –

0

を使用して送信を変更しようとすることができます

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

は、サブスクリプションメソッドが呼び出されたときのログを取得しようとしましたか? 本当に呼び出されていませんか?

呼び出されても、期待したことは起こりませんでした。 AncorNameのgetterが呼び出されたときにOnPropertyChanged()を使用してみてください。

関連する問題