2016-07-22 18 views
0

A ComboBox und Button befinden sich auf verschiedenen Benutzersteuerelementen und sehen sich nicht. Beide sind jedoch an die gleiche ViewModel gebunden.So führen Sie eine Methode durch Bindung in WPF aus

Die Button hat ein Click-Ereignis, das eine Methode im Code-Behind seiner Benutzersteuerung ausführt.

Ich möchte diese Methode ausführen, wenn ich ComboBox ändern. Nehmen wir zum Beispiel an, dass die SelectedItem der ComboBox an eine Eigenschaft in ViewModel gebunden ist, jetzt, wenn es geändert wird, möchte ich die Methode in der anderen Kontrolle ausgeführt werden.

Antwort

0

möchten Sie ein Objekt (d. H. SelectedComboBoxItem) erstellen, das die geänderte Eigenschaft erhöht. Verwenden Sie dann das generierte Ereignis, um den Ereignistrigger zu starten, den Sie erstellen möchten.

1

Sie haben erwähnt, dass diese beiden Steuerelemente einander nicht bekannt sind, aber an denselben ViewModel gebunden sind. Ich habe den einfachsten Weg gefunden, irgendeine Art von Code auszuführen, wenn eine Eigenschaft geändert wird, um sie direkt aus dem Zugriffsmodifizierer set { } auszuführen. Beachten Sie Folgendes:

public class MyViewModel 
{ 
    private MyObject _currentObject; 

    public MyObject CurrentObject 
    { 
     get { return this._currentObject; } 
     set 
     { 
      this._currentObject = value; 
      //Usually where OnPropertyChanged goes or however you implement INotifyPropertyChanged 

      //Where we call our command, logic can be introduced if needed. 
      //Also we may just call the method directly. 
      this.SomeCommand.Execute(null); 
     } 
    } 

    private Command _someCommand; 

    public Command SomeCommand 
    { 
     get 
     { 
      return this._someCommand ?? (this._someCommand = new Command(
       () => 
       { 
        this.SomeMethod(); 
       }, 
       () => 
       { 
        //The CanExecute test, returns bool. 
        return this._currentObject != null ? true : false; 
       })); 
     } 
    } 

    private string SomeMethod() 
    { 
     return "I just got called yo!"; 
    } 
} 

Update:

Da der Code zur Ausführung in dem Handler existiert müssen Sie ein wenig Arbeit zu tun, um dieses Recht zu bekommen. Obwohl dieses MVVM Prinzipien verletzt, wird es funktionieren:

  1. Sie müssen den Code bewegen, um die ViewModel unter einer neuen Methode auszuführen, wenn noch nicht geschehen, lassen Sie halten die mit dem SomeMethod() Namen.
  2. Sie müssen einen Verweis auf die ViewModel im Handler erhalten. Ich gehe davon aus das bereits gesetzt ist als DataContext

    MyViewModel viewModel = DataContext as MyViewModel;

  3. Als nächstes müssen Sie diese Methode aus dem Handler nennen:

    viewModel.SomeMethod();

  4. Jetzt können Sie die Methode aufrufen aus Der set { } Teil Ihrer Immobilie ist in der ViewModel enthalten.

Ich hoffe, das funktioniert für Sie.

+0

Vielen Dank für die Einsicht, aber mein Problem ist, dass die Methode, die ich versuche zu rufen, im Code-Behind des Benutzersteuerelements steht, das 'Button' hält. Vielleicht liegt es an meinem schlechten Design, dass diese Situation passiert ist. Ich verwende diese Schaltfläche, um eine Zeichnung beim Klicken zu aktualisieren. Das möchte ich auch beim Wechsel der Combobox erreichen. – Vahid