Ich muss einen MessageDialog von einem ViewModel anzeigen, und ich muss eine Aktion mit der Schaltfläche gedrückt verknüpfen.warten DisplayActionSheet (...) gibt sofort null unter Windows zurück
//Dummy implementation
private string Translate(string element) => element;
public async Task ShowAsync(string message, Dictionary<string, Action> commands)
{
var translatedCommands = new Dictionary<string, Action>();
foreach (var element in commands)
translatedCommands.Add(Translate(element.Key), element.Value);
string selectedElement = null;
var buttons = new string[translatedCommands.Keys.Count];
translatedCommands.Keys.CopyTo(buttons, 0);
Task<string> Result = null;
Device.BeginInvokeOnMainThread(() =>
{
Result = App.Current.MainPage.DisplayActionSheet(message, null, null, buttons);
});
selectedElement = await Result;
if (selectedElement == null)
return;
translatedCommands[selectedElement]?.Invoke();
}
Und dann nenne ich es von einem RelayCommand
private async void ExecuteButtonCommand(object p)
{
int Selectedindex = 0;
var messageCommands = new Dictionary<string, Action>()
{
{ "Before 2003",() =>
{
Selectedindex = 1;
}
},
{ "After 2003",() =>
{
Selectedindex = 2;
}
},
};
await ShowAsync("Select period", messageCommands);
var dummy = Selectedindex;
}
, die sehr gut auf Android arbeitet aber unter Windows DisplayActionSheet
return null sofort: Zu diesem Zweck habe ich folgendes geschrieben. Ich habe gesehen this so question, aber es funktioniert nicht für mich, denn wenn ich innen Device.BeginInvokeOnMainThread
erwarte, wird ShowAsync nicht erwartet.
Nein! Es hat nicht funktioniert. Die Show wartet nicht, bis der Nachrichtendialog geschlossen ist, und DisplayActionSheet wartet nicht. Also meine Aktion wird nicht ausgeführt. –