【问题标题】:Unable to pass back a value from the RG popup dialog无法从 RG 弹出对话框传回值
【发布时间】:2023-01-10 07:20:04
【问题描述】:

所以我试图从我设置为列表属性的 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;

    }
}

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

这是我设置 PlayersIds 的按钮代码

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

【问题讨论】:

    标签: c# xamarin.forms


    【解决方案1】:

    好的,所以我认为最好的方法似乎是这样。

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

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

    【讨论】:

      【解决方案2】:

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

      public EventHandler OnTapped;
      

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

      OnTapped?.Invoke(sender, e);
      

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

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

      【讨论】:

      • 已经说明了我的答案,但感谢您的贡献可能会帮助其他人
      猜你喜欢
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多