Another way. This basically mimics an event SelectedTabChangedin MVVM.
It works by binding a Nametab property to a property SelectedTabNamein the view model, to which you can do whatever you want (including preventing tab changes, setting the value back to its previous value).
ViewModel
public string _selectedTabName;
public string SelectedTabName
{
get { return _selectedTabName; }
set
{
if (_selectedTabName != value)
{
_selectedTabName = value;
RaisePropertyChanged("SelectedTabName");
if (SelectedTabName == "EVENTS" && EventsLoaded == false)
{
LoadEvents();
}
if (SelectedTabName == "MESSAGES" && MessagesLoaded == false)
{
LoadMessages();
}
}
}
}
Xaml
<TabControl SelectedValuePath="Name" SelectedValue="{Binding SelectedTabName}">
<TabItem Header="Events" Name="EVENTS">
...
</TabItem>
<TabItem Header="Messages" Name="MESSAGES">
...
</TabItem>
</TabControl>
source
share