Me gustaría llamar a un comando cuando se selecciona un TabItem de mi TabControl.Usar un comando con TabItem
¿Hay alguna manera de hacerlo sin romper el patrón MVVM?
Me gustaría llamar a un comando cuando se selecciona un TabItem de mi TabControl.Usar un comando con TabItem
¿Hay alguna manera de hacerlo sin romper el patrón MVVM?
Utilice un AttachedCommand Behavior, que le permitirá enlazar un comando de eventos de WPF
<TabControl ...
local:CommandBehavior.Event="SelectionChanged"
local:CommandBehavior.Command="{Binding TabChangedCommand}" />
Por supuesto, si usted está utilizando el patrón de diseño MVVM y vinculante SelectedItem
o SelectedIndex
, que también podría ejecutar el comando de el evento PropertyChanged
void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "SelectedIndex")
RunTabChangedLogic();
}
se puede hacer uso de las siguientes clases juntos:
EventTrigger
clase del espacio de nombres System.Windows.Interactivity
(ensamblaje System.Windows.Interactivity
).EventToCommand
clase desde el GalaSoft.MvvmLight.Command
espacio de nombres (MVVM Light Toolkit montaje, por ejemplo, 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>
crear una instancia de la orden en el ViewModel
constructor:
TabSelectionChangedCommand = new RelayCommand<SelectionChangedEventArgs>(args =>
{
// Command action.
});
Eso es solo 'Interactividad' del [Blend SDK] (http://www.microsoft.com/download/en/details.aspx?id=10801), no necesita ningún framework MVVM para usar esto. –
@ H.B., Es correcto para la clase 'EventTrigger'. Pero la clase 'EventToCommand' pertenece a MVVM Light Toolkit. –
Pregunta relacionada: http://stackoverflow.com/q/5868589/490018. –
También puede enlazar a IsSelected y gestionar los cambios en esa propiedad i n su ViewModel. – Will