Подтвердить что ты не робот

Привязать кнопку к команде (Windows Phone 7.5)

Я работаю над своим окном-телефоном, использующим некоторые простые привязки данных. Я уже создал приложение, основанное на методе программирования MvvM. Приложение, над которым я работаю, также работает по методу MvvM. Поскольку я хочу, чтобы мой код был как можно более чистым, я искал способ сделать "событие нажатия кнопки" (которое обычно происходит на странице codebehind) происходит в моей модели viewmodel или mainviewmodel.

Я искал интернет, нуждаясь в простом объяснении интерфейса Icommand, потому что я считаю, что это путь. Проблема с объяснениями, которые я обнаружил, заключалась в том, что некоторые из них были основаны на наборе инструментов MvvMlight с использованием функции CommandRelay. Я не хочу использовать MvvM light toolkit, потому что сначала хочу понять вещи. Другие учебники, которые я нашел, были написаны более энтузиастами-разработчиками, которые дают вам избыток информации.

Итак, в основном. Может ли кто-нибудь показать мне самую простую версию Icommand, связанную с кнопкой?

4b9b3361

Ответ 1

В вашем XAML:

<Button Content="My Button" Command="{Binding MyViewModelCommand}" />

В вашей модели вида:

public class MyViewModel
{

    public MyViewModel()
    {
        MyViewModelCommand = new ActionCommand(DoSomething);
    }

    public ICommand MyViewModelCommand { get; private set; }

    private void DoSomething()
    {
        // no, seriously, do something here
    }
}

INotifyPropertyChanged и другие люксы в стиле модели. В нижней части этого ответа показан альтернативный способ структурирования команды в вашей модели представления.

Теперь вам понадобится реализация ICommand. Я предлагаю начать с чего-то простого подобного и расширить или реализовать другие функции/команды по мере необходимости:

public class ActionCommand : ICommand
{
    private readonly Action _action;

    public ActionCommand(Action action)
    {
        _action = action;
    }

    public void Execute(object parameter)
    {
        _action();
    }

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;
}

Вот альтернативный способ компоновки вашей модели вида:

public class MyViewModel
{
    private ICommand _myViewModelCommand;
    public ICommand MyViewModelCommand
    {
        get 
        {
            return _myViewModelCommand
                ?? (_myViewModelCommand = new ActionCommand(() => 
                {
                    // your code here
                }));
        }
    }
}

Ответ 2

Чтобы добавить к Jays ответ:

Моим любимым временем является команда DelegateCommand из команды "Шаблоны и практики" @Microsoft. Подробнее читайте этот пост.