2012-03-25 8 views
0

Ich versuche, eine ICommand-Eigenschaft auf einem Button-Befehl von MainWindow zu binden. Aber es funktioniert nicht. Hier ist Beispielcode, den ich dafür versuche.Wie bindet man ICommand von der MainWindow-Klasse in WPF?

C# Code:

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}"/> 

Eigentlich möchte ich UI-Elemente wie Datagridview SelectedItem Eigentum oder andere UI-Eigenschaft zuzugreifen ICommand mit, dass s why i am writing ICommand in MainWindow Class. I don t wissen dies der richtige Weg ist, oder Falsche Weg. Ich versuche es einfach und ich bin kein Erfolg. Wenn es falsch ist, rate mir bitte, was richtig ist und wie es geht.

Vielen Dank für den Rat.

Antwort

1

Zuerst Sie die DataContext auf den Button gesetzt haben:

buttonStrat.DataContext = this; 

Und in der XAML-Verwendung dieser:

Command="{Binding StartButtonCommand}" 

Auch der Code kürzer machen Sie Ihre Immobilie verändern könnte dies:

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