La proprietà DataContext esposta da ogni FrameworkElement sta alla base dell'engine di data binding: le proprietà dell'oggetto che viene assegnato al DataContext possono essere visualizzate direttamente attraverso il markup e le espressioni di Binding, oltre a poter essere manipolate in relazione alle interazioni dell'utente.
In Silverlight 5 è stato aggiunto uno speciale evento, DataContextChanged, che si scatena a seguito del cambiamento dell'oggetto assegnato alla proprietà DataContext.
<ListBox x:Name="lb1" ItemsSource="{Binding MenuItemsView, Source={StaticResource MenuItemCollection}}"> </ListBox> <TextBox DataContext="{Binding ElementName=lb1, Path=SelectedItem}" Text="{Binding Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" DataContextChanged="TextBlock_DataContextChanged" />
Nel gestore dell'evento abbiamo il parametro DependencyPropertyChangedEventArgs che contiene il nuovo ed il precendente DataContext.
private void TextBlock_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { var oldObj = e.OldValue as MenuItem; if (oldObj != null) oldObj.NameChanged -= new EventHandler(obj_NameChanged); var newObj = e.NewValue as MenuItem; newObj.NameChanged += new EventHandler(obj_NameChanged); } void obj_NameChanged(object sender, EventArgs e) { var obj = sender as MenuItem; MessageBox.Show(obj.Name); }
Grazie alle proprietà NewValue e OldValue possiamo registrarci e deregistrarci ad eventuali eventi esposti dagli oggetti impostati come DataContext, al momento del loro avvicendamento.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Integrare SQL Server in un progetto .NET Aspire
Ordine e importanza per @layer in CSS
Selettore CSS :has() e i suoi casi d'uso avanzati
Proteggere le risorse Azure con private link e private endpoints
Creare una libreria CSS universale: Nav menu
Introduzione alle Container Queries
Referenziare un @layer più alto in CSS
Utilizzare l nesting nativo dei CSS
Gestire codice JavaScript con code splitting e lazy loading
Integrare un servizio esterno con .NET Aspire
Utilizzare Container Queries nominali
Eseguire script pre e post esecuzione di un workflow di GitHub
I più letti di oggi
- Gestione file Javascript in Blazor con .NET 9
- Documentare i servizi REST con Swagger e OpenAPI con .NET 9
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!