Chciałbym wywołać komendę po wybraniu TabItem w moim TabControl.Użyj polecenia z TabItem
Czy istnieje sposób, aby to zrobić bez łamania wzoru MVVM?
Chciałbym wywołać komendę po wybraniu TabItem w moim TabControl.Użyj polecenia z TabItem
Czy istnieje sposób, aby to zrobić bez łamania wzoru MVVM?
Użyć AttachedCommand Behavior, który pozwoli Ci powiązać polecenie do WPF zdarzeń
<TabControl ...
local:CommandBehavior.Event="SelectionChanged"
local:CommandBehavior.Command="{Binding TabChangedCommand}" />
Oczywiście, jeśli używasz wzorzec projektowy MVVM i wiążące SelectedItem
lub SelectedIndex
, można również uruchomić polecenie w zdarzenie PropertyChanged
void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "SelectedIndex")
RunTabChangedLogic();
}
można to zrobić przy użyciu następujących klas razem:
EventTrigger
klasa z przestrzeni nazw System.Windows.Interactivity
(System.Windows.Interactivity
).EventToCommand
z klas GalaSoft.MvvmLight.Command
namespace (MVVM Light Toolkit montażu, na przykład 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>
Tworzenie wystąpienie polecenia w konstruktora ViewModel
:
TabSelectionChangedCommand = new RelayCommand<SelectionChangedEventArgs>(args =>
{
// Command action.
});
To tylko "Interaktywność" z [Blend SDK] (http://www.microsoft.com/download/en/details.aspx?id=10801), nie potrzebujesz żadnej platformy MVVM do korzystania z tego. –
@ H.B., Jest poprawne dla klasy 'EventTrigger'. Ale klasa 'EventToCommand' należy do MVVM Light Toolkit. –
Powiązane pytanie: http://stackoverflow.com/q/5868589/490018. –
Można również powiązać z IsSelected i obsłużyć zmiany tej właściwości. w swoim ViewModelu. – Will