2017-04-19 17 views
0

我目前正在開發一個使用MVVM格式的WPF/Xaml的應用程序。在Xaml按鈕上運行2個命令

我試圖從一個單一的按鈕運行2個命令來關閉控件並刪除該控件所基於的對象。

這些命令創建的viewmodels是分開的,所以我不確定如何在Viewmodels中執行此操作。

我希望只運行在XAML這兩個命令,如果這是可能的

如果代碼的解決方案需要

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

其他命令我想運行被稱爲

CancelCommand 

我希望有人能幫到

回答

1

只有一個Command屬性,可以被設置爲一個單一的ICommand,但你可以創建一個執行命令和綁定到這一個在您的視圖模型的另一個命令屬性:也許,如果你在一個基類,覆蓋寫你的命令

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

我確實看過複合命令,但命令是在不同的viewmodels,所以我不知道我將如何運行它們兩個。 這就是爲什麼我試圖在XAML中做到這一點,謝謝! :) –

+0

您仍然只能將Button的Command屬性綁定到單個命令。我不知道在不同的視圖模型中定義命令的意義在於當你仍然需要調用它們時。這似乎是一個設計缺陷。 – mm8

+0

好的。我會嘗試用複合命令做一些事情。謝謝你的建議。 我不相信它的設計缺陷。它是一個非常大的應用。我可以嘗試移動命令,但它們並不完全相關,並且將它們放在同一視圖模型中可能並不理想 –

0

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) 
    { 

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