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
 }