无法从 RG 弹出对话框传回值

Unable to pass back a value from the RG popup dialog

所以我试图从我设置为 属性 列表的 rgPopupPage 中获取一个值。

我是这样调用弹出页面的。

private  async void btnAddExistingPlayer_Clicked(object sender, EventArgs e)
{
    var team = grdteamManagment.SelectedItem as Team;
    if (team != null)
    {
        var page = new PlayerSelection(team.Id,true);
        await PopupNavigation.Instance.PushAsync(page); // lets show the rg popup page

        //normally in c# land I would this     
        var returnIds = page.PlayersId;

    }
}

但由于某种原因,它无法正常工作,因为它会提前弹出导航。

这是我设置 PlayersId 的按钮代码

private async void btnSelectPlayers_Clicked(object sender, EventArgs e)
{ 
PlayersId = new List<int>();
var item = lvPlayers.SelectedItem as PlayersSelectViewModel;
txtPlayerToInclude.Text = item.Id.ToString();
if (rbMultiplePlayers.IsChecked)
{
    var multiPlayers = lvPlayers.SelectedItems;
    string playersIds = string.Empty;
    foreach (PlayersSelectViewModel players in multiPlayers)
    {
        PlayersId.Add(players.Id);
        lblPlayerName.Text += players.FullName;

    }
    txtPlayerToInclude.Text = String.Join(",", PlayersId);
}
else
{
    var player = lvPlayers.SelectedItem as PlayersSelectViewModel;
    if (player != null)
    {
        PlayersId.Add(player.Id);

        txtPlayerToInclude.Text = string.Join("", PlayersId);
        lblPlayerName.Text += player.FullName;
    }
}
 await PopupNavigation.Instance.PopAsync();

}

我查看了消息传递示例,但并不真正理解它们是如何结合在一起的。

https://github.com/rotorgames/Rg.Plugins.Popup

好的,所以我想出了最好的方法。

在我的呼叫弹出窗口中有这个。即在我的按钮上关闭

MessagingCenter.Send<App, string>(App.Current as App, "PlayersSelected",
txtPlayerToInclude.Text);

然后在我第一次调用弹出窗口的函数中,我可以订阅这里重要的名称。

private async void btnAddExistingPlayer_Clicked(object sender, EventArgs e)
{
    var team = grdteamManagment.SelectedItem as Team;

    if (team != null)
    {
        var page = new PlayerSelection(team.Id, true);

        MessagingCenter.Subscribe<App, string>(App.Current, 
        "PlayersSelected", (snd, arg) =>
        {
            var items = arg.ToString();
        });
        await PopupNavigation.Instance.PushAsync(page);


    }
}

像这样在弹出窗口中编写事件处理程序

public EventHandler OnTapped;

然后当你像这样弹出弹出窗口时调用它

OnTapped?.Invoke(sender, e);

现在您必须像这样获取 EventArgs 值

Page.OnTapped += OnGridTapped;

private void OnGridTapped(object sender, EventArgs e)
{
    Debug.WriteLine(e);
}