Как я могу предотвратить запуск моей команды при загрузке приложения - PullRequest
0 голосов
/ 25 сентября 2018

Итак, у меня есть это простое приложение с кнопкой, вот и все.И у кнопки есть свойство команды, привязанное к команде.

Это команда, к которой она привязана.

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

<Grid>
    <Button Width="100"
            Height="25"
            Content="Async?"
            Command="{Binding MoveMouseModel.StartCommand}"/>
</Grid>

Когда я запускаю приложение, эти сообщения отображаются, хотя я не нажимал кнопку.Что я могу сделать, чтобы предотвратить это?

1 Ответ

0 голосов
/ 25 сентября 2018

Вы передаете результат MoveMove вашему классу StartAsyncCommand, а не фактическому методу

 public MoveMouseModel()
 {
      StartCommand = new StartAsyncCommand(MoveMove()); //<-- MoveMove() is executed
 }

Должно работать, когда вы вместо этого фактически передаете метод и вызываете его внутри StartAsyncCommand

например.public StartAsyncCommand(Func<Task> fnc) {...} как конструктор, а затем просто выполнить функцию, когда используется фактическая команда

интересно, почему ваша визуальная студия не отображает какое-то информационное сообщение "этот метод не ожидается", хотя ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...