C# 事件x:绑定到异步任务方法可以吗?
我想知道使用x:bind将事件绑定到异步任务方法是一种好的做法吗 基本上,我使用的是MVVM,我的ViewModel中包含一些异步任务方法,我想将异步任务方法绑定到我视图中的一个事件,这实际上很好,但是,我听说我们不应该将一个事件转换成异步任务 下面是一些代码示例: 事件x:绑定到异步任务方法 SomeViewModel.cs SomeView.xamlC# 事件x:绑定到异步任务方法可以吗?,c#,xaml,asynchronous,mvvm,uwp,C#,Xaml,Asynchronous,Mvvm,Uwp,我想知道使用x:bind将事件绑定到异步任务方法是一种好的做法吗 基本上,我使用的是MVVM,我的ViewModel中包含一些异步任务方法,我想将异步任务方法绑定到我视图中的一个事件,这实际上很好,但是,我听说我们不应该将一个事件转换成异步任务 下面是一些代码示例: 事件x:绑定到异步任务方法 SomeViewModel.cs SomeView.xaml 如果您遵循MVVM模式,那么最好避免事件,而是使用命令 我没有编译代码,所以它可能不是100%准确,但这是我的想法 <Button Co
如果您遵循MVVM模式,那么最好避免事件,而是使用命令 我没有编译代码,所以它可能不是100%准确,但这是我的想法
<Button Context="Click" Command="ButtonClickedCommand" />
在MVVM构造函数中,需要将其初始化为方法
ButtonClickedCommand = new DelegateCommand(ButtonClicked);
现在你的方法。这应该是异步的
public async void ButtonClicked()
{
// Your code here.
}
为什么您的代码应该是异步的
您的UI方法应该是异步的,以避免冻结UI和中断用户
为什么我的async是一个异步void而不是一个异步任务
异步任务将强制代码等待代码。async void将调用任务,但不知道任务何时完成。因为这是与UI相关的,我们不想听到它的回音。据我所知,您必须绑定到void方法,不管是否异步。为什么要使用x:bind而不是命令?这是异步void,没关系。用户界面事件处理程序不必使用异步任务。@JustinXL:用户界面事件处理程序不必使用异步任务-更具体地说,用户界面事件处理程序不能使用异步任务。某些引用:。
public async void Done_clicked(...)
{
await vm.DoneAsync();
}
<Button Context="Click" Command="ButtonClickedCommand" />
DelegateCommand ButtonClickedCommand
ButtonClickedCommand = new DelegateCommand(ButtonClicked);
public async void ButtonClicked()
{
// Your code here.
}