как связать ICommand из класса MainWindow в WPF? - PullRequest
0 голосов
/ 25 марта 2012

Я пытаюсь привязать свойство ICommand к кнопке Command из MainWindow.Но это не работает.Вот пример кода, который я пытаюсь для этого.

C # Код:

public partial class MainWindow : Window
{
    private ICommand _StartButtonCommand;

    public ICommand StartButtonCommand
    {
        get{ return this._StartButtonCommand;}
        set 
        {
            if (this._StartButtonCommand!=value)
            {
                this._StartButtonCommand = value;
            }
        }
    }
     public MainWindow()
     {
        InitializeComponent();
        this.StartButtonCommand = new ReplayCommand(new Action<object>(startButtonCommandEx));
     }
     private void startButtonCommandEx(object obj)
     {
         MessageBox.Show("Done");
     }

    protected class ReplayCommand : ICommand
    {
        private Action<object> _action;

        public ReplayCommand(Action<object> action)
        {
            this._action = action;
        }
        public bool CanExecute(object parameter)
        {
            return true;
        }

        public event EventHandler CanExecuteChanged;

        public void Execute(object parameter)
        {
            try
            {
                if (parameter!=null)
                {
                    this._action(parameter);
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message, "AutoShutdown", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
    }

XAML:

 <Button x:Name="buttonStrat" Content="Start" HorizontalAlignment="Left" Width="84.274" Height="39.246" Command="{Binding StartButtonCommand, ElementName=window}"/>

На самом деле я хочу получить доступ к элементам пользовательского интерфейса, таким как свойство DataGridView SelectedItemили любое другое свойство пользовательского интерфейса, использующее ICommand, которое s why i am writing ICommand in MainWindow Class. I don не знает, что это правильный или неправильный путь.Я просто пробую это, и я не успехЕсли это неверный путь, пожалуйста, посоветуйте мне, как правильно и как это сделать.

Спасибо за совет.

1 Ответ

1 голос
/ 25 марта 2012

Во-первых, вы не установили DataContext на кнопку:

buttonStrat.DataContext = this;

А в xaml используйте это:

Command="{Binding StartButtonCommand}"

Также, чтобы сделать ваш код короче, вы можете изменить свою собственность на:

public ICommand StartButtonCommand
{
    get { return new ReplayCommand(new Action<object>(startButtonCommandEx)); }
}
...