Используйте команду с TabItem - PullRequest
5 голосов
/ 24 февраля 2012

Я хотел бы вызвать Команду, когда выбран TabItem моего TabControl.

Есть ли способ сделать это, не нарушая шаблон MVVM?

Ответы [ 2 ]

6 голосов
/ 24 февраля 2012

Использование AttachedCommand Behavior , которое позволит вам привязать команду к событиям WPF

<TabControl ...
    local:CommandBehavior.Event="SelectionChanged"  
    local:CommandBehavior.Command="{Binding TabChangedCommand}" />

Конечно, если вы используете шаблон проектирования MVVM и привязку SelectedItemили SelectedIndex, вы также можете запустить команду в PropertyChanged событии

void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "SelectedIndex")
        RunTabChangedLogic();
}
5 голосов
/ 24 февраля 2012

Это можно сделать, используя вместе следующие классы:

  • EventTrigger класс из пространства имен System.Windows.Interactivity (System.Windows.Interactivity сборка).
  • EventToCommand класс изпространство имен GalaSoft.MvvmLight.Command (сборка MVVM Light Toolkit , например, GalaSoft.MvvmLight.Extras.WPF4):

XAML:

<Window ...
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command
        ...>
...
    <TabControl>
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectionChanged">
                <cmd:EventToCommand Command="{Binding TabSelectionChangedCommand}"
                                    PassEventArgsToCommand="True" />
            </i:EventTrigger>
        </i:Interaction.Triggers>

        <TabItem>...</TabItem>
        <TabItem>...</TabItem>
    </TabControl>
...
</Window>

Создание экземпляракоманда в конструкторе ViewModel:

TabSelectionChangedCommand = new RelayCommand<SelectionChangedEventArgs>(args =>
    {
        // Command action.
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...