无法从 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();
}
我查看了消息传递示例,但并不真正理解它们是如何结合在一起的。
好的,所以我想出了最好的方法。
在我的呼叫弹出窗口中有这个。即在我的按钮上关闭
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);
}
所以我试图从我设置为 属性 列表的 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();
}
我查看了消息传递示例,但并不真正理解它们是如何结合在一起的。
好的,所以我想出了最好的方法。
在我的呼叫弹出窗口中有这个。即在我的按钮上关闭
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);
}