vorrei chiamare un comando quando viene selezionata una TabItem della mia TabControl.utilizzare un comando con TabItem
C'è un modo per farlo senza rompere il modello MVVM?
vorrei chiamare un comando quando viene selezionata una TabItem della mia TabControl.utilizzare un comando con TabItem
C'è un modo per farlo senza rompere il modello MVVM?
Utilizzare un AttachedCommand Behavior, che vi permetterà di associare un comando ad eventi WPF
<TabControl ...
local:CommandBehavior.Event="SelectionChanged"
local:CommandBehavior.Command="{Binding TabChangedCommand}" />
Naturalmente, se si sta utilizzando il modello di progettazione MVVM e vincolante SelectedItem
o SelectedIndex
, si potrebbe anche eseguire il comando in l'evento PropertyChanged
void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "SelectedIndex")
RunTabChangedLogic();
}
Esso può essere fatto utilizzando le seguenti classi insieme:
EventTrigger
classe dalla System.Windows.Interactivity
namespace (System.Windows.Interactivity
montaggio).EventToCommand
classe dal GalaSoft.MvvmLight.Command
namespace (MVVM Light Toolkit assemblaggio, per esempio, 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>
creare un'istanza del comando nel costruttore ViewModel
:
TabSelectionChangedCommand = new RelayCommand<SelectionChangedEventArgs>(args =>
{
// Command action.
});
Questo è solo 'Interactivity' dalla [SDK Miscela] (http://www.microsoft.com/download/en/details.aspx?id=10801), non hai bisogno di un quadro MVVM per utilizzare questo. –
@ H.B., È corretto per il 'EventTrigger' di classe. Ma la classe 'EventToCommand' appartiene a MVVM Light Toolkit. –
questione connessa: http://stackoverflow.com/q/5868589/490018. –
È possibile anche l'associazione a IsSelected e gestire le modifiche a che io immobili sul tuo ViewModel. – Will