Mi rendo conto che a questa soluzione è stata data risposta molto tempo fa, tuttavia una soluzione migliore sarebbe quella di associare gli elementi a una raccolta nel modello ed esporre una proprietà a cui è associato l'elemento selezionato.
XAML:
<!-- MyTemplateForItem represents your template -->
<TabControl ItemsSource="{Binding MyCollectionOfItems}"
SelectedItem="{Binding SelectedItem}"
ContentTemplate="{StaticResource MyTemplateForItem}">
</TabControl>
Codice Dietro:
public ObservableCollection<MyItem> MyCollectionOfItems {
get;
private set;
}
private MyItem selectedItem;
public MyItem SelectedItem{
get { return selectedItem; }
set {
if (!Object.Equals(selectedItem, value)) {
selectedItem = value;
// Ensure you implement System.ComponentModel.INotifyPropertyChanged
OnNotifyPropertyChanged("SelectedItem");
}
}
}
Ora, tutto ciò che dovete fare per impostare la voce è:
MyItem = someItemToSelect;
È possibile utilizzare la stessa logica con la proprietà SelectedIndex
, inoltre, è possibile utilizzare i due allo stesso tempo.
Questo approccio consente di separare il modello correttamente dall'interfaccia utente, che potrebbe consentire di sostituire lo TabControl
con qualcos'altro lungo la linea ma senza richiedere la modifica del modello sottostante.
fonte
2011-06-23 03:46:35
Nel mio caso, come io uso un datagrid, qualcosa si blocca la selezione o lo stato attivo, quindi ho dovuto racchiuderlo in una chiamata a Dispatcher. –