2017-04-19 3 views
0

Ich entwickle gerade eine Anwendung mit WPF/Xaml im MVVM-Format.Ausführen von 2 Befehlen auf Xaml Button

Ich versuche, 2 Befehle von einer einzigen Schaltfläche auszuführen, um ein Steuerelement zu schließen und das Objekt zu löschen, auf dem das Steuerelement basierte.

Die Viewmodels, in denen diese Befehle erstellt werden, sind getrennt, daher bin ich nicht sicher, wie dies in den Viewmodels zu tun ist.

ich für eine Lösung bin der Hoffnung, dass gerade diese zwei Befehle in der XAML läuft, wenn dies möglich ist

Der Code bei Bedarf

<Button Grid.Column="4" 
Command="{Binding DeleteCustom}" 
Visibility="{Binding IsCustom}"/> 

Der andere Befehl i ausgeführt werden soll aufgerufen wird

CancelCommand 

ich hoffe mir kann jemand helfen

Antwort

1

Es gibt nur eine einzigeistEigenschaft, die auf einem einzigen ICommand eingestellt werden können, aber Sie können einen anderen Befehl Eigenschaft Ihrer Ansicht nach Modell erstellen, die beide Befehle und binden an diese ausführt:

public ICommand CompositeCommand { get; } = new RelayCommand<object>((arg) => 
{ 
    DeleteCustom.Execute(null); 
    CancelCommand.Execute(null); 
}); 
+0

Ich habe in zusammengesetzte Befehle untersucht, aber die Befehle sind in verschiedenen Viewmodels, so bin ich mir nicht sicher, wie ich sie beide ausführen würde. Deshalb habe ich versucht, es in der XAML zu tun, danke aber! :) –

+0

Sie können die Command-Eigenschaft der Schaltfläche nur an einen einzelnen Befehl binden. Ich weiß nicht, was es bedeutet, die Befehle in verschiedenen Ansichtsmodellen zu definieren, wenn Sie beide noch aufrufen müssen. Das scheint ein Designfehler zu sein. – mm8

+0

Ok. Ich werde versuchen, etwas mit einem zusammengesetzten Befehl zu tun. Danke für den Ratschlag. Ich glaube nicht, dass es ein Designfehler ist. Es ist eine sehr große Anwendung. Ich kann versuchen, die Befehle zu verschieben, aber sie sind nicht vollständig verwandt und sie in das gleiche Viewmodel möglicherweise nicht wünschenswert –

0

Vielleicht, wenn Sie Ihren Befehl in einer Basisklasse und überschreiben schreiben es

ViewModelBase 
{ 

    public virtual ICommand CompositeCommand { get; } = new RelayCommand<object>((arg) => 
    { 
     DeleteCustom.Execute(null); 
     CancelCommand.Execute(null); 
    }); 

    protected virtual DeleteCustom(object arg) 
    { 
     /..... 
    } 

    protected virtual CancelCommand(object arg) 
    { 
     /.... 
    } 

    //.......... 
} 


FirstViewModel : ViewModelBase 
{ 
    // ............... 

    protected override void DeleteCustom(object arg) 
    { 
    } 
    // .......... 
} 

SecondviewModel : ViewModelBase 
{ 
    // ............... 

    protected override void CancelCommand(object arg) 
    { 

    } 
    // .......... 
} 
Verwandte Themen