我如何从Xaml(单击时)运行异步方法,通常我会使用以下方法:

xmlns:ii="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
             xmlns:eii="http://schemas.microsoft.com/expression/2010/interactions"

<Button Height="30" Width="200" Content="Save" >
                <ii:Interaction.Triggers>
                    <ii:EventTrigger EventName="Click">
                        <eii:CallMethodAction TargetObject="{Binding}" MethodName="Saveing"/>
                    </ii:EventTrigger>
                </ii:Interaction.Triggers>
            </Button>

保存方式:
public async Task Saveing(){...}

最佳答案

MVVM的重点是将UI与处理分开。

将按钮的Command属性绑定(bind)到ViewModel中的ICommand(RelayCommand或其他实现)项。可以以async方式调用此命令的关联方法。例如。

public ICommand SaveCommand {get; private set;}

private async Task SaveMethodAsync()
{
    await dbService.SaveDataAsync(modelItem).ConfigureAwait(false);
    ...
}


public ViewModel()
{
    SaveCommand = new RelayCommand(async () =>
        await SaveMethodAsync().ConfigureAwait(false));
}

关于c# - 从Xaml运行异步方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40235511/

10-11 18:21