C# 如何防止命令在应用程序加载时运行
我有一个简单的应用程序,它有一个按钮,就是这样。 按钮具有绑定到命令的命令属性 这是它绑定到的命令C# 如何防止命令在应用程序加载时运行,c#,.net,wpf,mvvm,data-binding,C#,.net,Wpf,Mvvm,Data Binding,我有一个简单的应用程序,它有一个按钮,就是这样。 按钮具有绑定到命令的命令属性 这是它绑定到的命令 public class StartAsyncCommand : ICommand { private Task _execute; public StartAsyncCommand(Task Execute) { _execute = Execute; } public bool Ca
public class StartAsyncCommand : ICommand
{
private Task _execute;
public StartAsyncCommand(Task Execute)
{
_execute = Execute;
}
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
_execute.Start();
}
public event EventHandler CanExecuteChanged;
}
在ViewModel中,这就是我得到的
public StartAsyncCommand StartCommand { get; }
public MoveMouseModel()
{
StartCommand = new StartAsyncCommand(MoveMove());
}
public async Task MoveMove()
{
MessageBox.Show("First Message..");
await Task.Delay(2000);
MessageBox.Show("Second Message..");
}
XAML
当我启动应用程序时,即使我没有单击按钮,这些消息框也会显示出来。
如何防止这种情况发生?您正在将
MoveMove
的结果传递给startasynccand
类,而不是实际的方法
public MoveMouseModel()
{
StartCommand = new StartAsyncCommand(MoveMove()); //<-- MoveMove() is executed
}
public-MoveMouseModel()
{
StartCommand=newstartAsyncCommand(MoveMove());//在CanExecute()中使用一些条件
方法取决于参数
?Ohhh!对!我需要进一步研究Func委托,我完全没有注意到我传递的是结果,而不是实际的方法。谢谢!如果您愿意,可以扩展到完整的示例。您可能还想研究一些更通用的实现。例如:包含一个suchYeah,我已经听说RelayCommands从未进入过他们,我想这是我开始的时候了,谢谢!
public MoveMouseModel()
{
StartCommand = new StartAsyncCommand(MoveMove()); //<-- MoveMove() is executed
}