2016-04-28 3 views
4

Ich schreibe eine WPF-Anwendung, die programmgesteuert einige Schaltflächen erstellt. Wie erstellen Sie einen OnClick-Befehl für eine Schaltfläche im ViewModel? Ich möchte einen Befehl hinzufügen, um alle TextBoxen mit dem ResetButton zu löschen.Wie erstellen Sie einen OnClick-Befehl in WPF MVVM mit einer programmgesteuerten Schaltfläche?

new StackPanel 
      { 
       Orientation = Orientation.Horizontal, 
       Children = 
       { 
        new Button { Name = "SendButton", Content = "Send", MinWidth = 50, MaxHeight = 30, Margin = new Thickness(5), Background = Brushes.DodgerBlue }, 
        new Button { Name = "ResetButton", Content = "Reset", MinWidth = 50, MaxHeight = 30, Margin = new Thickness(5), Background = Brushes.DarkRed} 
       } 
      }); 

Antwort

2

Haben Sie Zugriff auf das Ansichtsmodell, während Sie das Stack Panel erstellen?

Wenn ja, haben Sie die Ansicht Modell einen Befehl aussetzen:

var myViewModel = (MyViewModel)this.DataContext; 
Button sendButton = new Button 
        { 
          Name = "SendButton", 
          Command = myViewModel.SendCommand, 
          // etcd 
        } 

Und Ihrer Ansicht nach Modell:

class MyViewModel : INotifyPropertyChanged 
{ 

    private class SendCommand : ICommand 
    { 
      private readonly MyViewModel _viewModel; 
      public SendCommand(MyViewModel viewModel) 
      { 
       this._viewModel = viewModel; 
      } 

      void ICommand.Execute(object parameter) 
      { 
       _viewModel.Send(); 
      } 

      bool ICommand.CanExecute(object p) 
      { 
       // Could ask the view nodel if it is able to execute 
       // the command at this moment 
       return true; 
      } 
    } 

    public ICommand SendCommand 
    { 
      get 
      { 
       return new SendCommand(this); 
      } 
    } 

    internal void Send() 
    { 
      // Invoked by your command class 
    } 
} 

In diesem Beispiel wird eine neue Klasse nur für diesen einen Befehl. Nachdem Sie dies mehr als einmal getan haben, werden Sie wahrscheinlich ein Muster sehen und es in eine generische Dienstprogrammklasse einschließen. Ein Beispiel finden Sie in http://www.wpftutorial.net/delegatecommand.html, oder verwenden Sie eine der unzähligen WPF-Erweiterungsbibliotheken.

0

Antwort auf Ihre erste Frage:

Wie erstellen Sie einen OnClick Befehl für eine Schaltfläche im Ansichtsmodell?

Sie können tatsächlich tun Onclick für eine Schaltfläche hinzuzufügen:

Button button = new Button { Name = "ResetButton"}; 
button.Click += button_Click; (button_Click is the name of method) 

void button_Click(object sender, RoutedEventArgs e) 
{ 
//do what you want to do when the button is pressed 
} 

durch die Art und Weise, Andrew Lösung besser ist. Ooaps.