Derzeit ist mein Implementierungsstil etwas ungewöhnlich.
Dies dient dazu, die Soße zu verhindern An einem Ort versammeln.
Async void sollte vermieden werden, aber ich weiß nicht, wie ich es vermeiden kann.
Irgendeine Lösung?
Unten ist die Quelle aufgeführt, die ich verwendet habe. (RelayCommand ist generisch und ich muss einen neuen asynchronen Befehl erstellen.)
,
Code: Select all
[*]
this.DataContext = new ViewModel();
Code: Select all
public ViewModel() { }
private isBusy;
public isBusy
{
get => isBusy;
set => SetField(ref isBusy, value);
}
public ObservableCollection Models { get; set; }
public ICommand OnClickButtonCommand { get => new ButtonCommand(this); }
Code: Select all
public ButtonCommand : RelayCommand
{
private ViewModel viewModel;
public ViewModel(ViewModel viewModel)
{
this.viewModel = viewModel
}
public override async void Execute(object obj)
{
viewModel.IsBusy = true;
await Task.Delay(1500);
viewModel.Models = new ObservableCollection(await Data());
viewModel.IsBusy = false;
}
private async Task Data()
{
await Task.Delay(100);
var data = new List();
...
return data;
}
}
Code: Select all
public interface IRelayCommand : ICommand
{
new void Execute(object obj);
}
public abstract class RelayCommand : IRelayCommand
{
public RelayCommand() { }
public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
bool ICommand.CanExecute(object obj)
{
if (obj?.ToString().Length == 0)
{
return false;
}
else
{
return true;
}
//return canExecute == null || this.canExecute.Invoke(parameter);
}
public abstract void Execute(object obj);
}
Danke.

https://johnthiriet.com/mvvm-going-asyn ... c-command/
Ich habe viel von dieser Site und anderen Beispielen gesehen, aber es ist ein Beispiel mit einer typischen Funktion,
also kann ich es nicht anwenden. ..