Я хотел бы вызвать команду, когда выбран TabItem моего TabControl.Использовать команду с TabItem
Есть ли способ сделать это, не нарушая шаблон MVVM?
Я хотел бы вызвать команду, когда выбран TabItem моего TabControl.Использовать команду с TabItem
Есть ли способ сделать это, не нарушая шаблон MVVM?
Используйте 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();
}
Это можно сделать, используя следующие классы вместе:
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.
});
Это просто «Интерактивность» из [Blend SDK] (http://www.microsoft.com/download/en/details.aspx?id=10801), вам не нужна инфраструктура MVVM, чтобы использовать это. –
@ H.B., Это правильно для класса EventTrigger. Но класс EventToCommand принадлежит к MVVM Light Toolkit. –
Связанный вопрос: http://stackoverflow.com/q/5868589/490018. –
Вы также можете привязать к IsSelected и обработать изменения этого свойства i n ваш ViewModel. – Will