Как правильно реализовать ICommand в WPF с использованием шаблона MVVM? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь сделать простое приложение WPF, используя шаблон MVVM. Я написал класс, реализующий интерфейс ICommand:

public class RelayCommand : ICommand
    {
        private Action<object> execute;
        private Func<object, bool> canExecute;

        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }

        public RelayCommand(Action<object> execute, Func<object, bool> canExecute = null)
        {
            this.execute = execute;
            this.canExecute = canExecute;
        }

        public bool CanExecute(object parameter)
        {
            return this.canExecute == null || this.canExecute(parameter);
        }

        public void Execute(object parameter)
        {
            this.execute(parameter);
        }
    }

, затем я использую его, когда нажимаю на кнопку в представлении, чтобы показать новую страницу, назначая страницу текущей странице

public ICommand bFirst_Click
    {
        get
        {
            return new RelayCommand(o => CurrentPage = first);
        }
    }

XAML-код в поле зрения

    <StackPanel>
        <Button Command="{Binding bFirst_Click}" Content="First"/>
    </StackPanel>
    <Frame
        Grid.Column="1"
        Content="{Binding CurrentPage}"
        NavigationUIVisibility="Hidden"
        Opacity="{Binding FrameOpacity}"
        />

Но ничего не происходит. Пожалуйста, помогите мне, я что-то упустил или делал неправильно?

...