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
Eliminare record doppi in Sql Server
Triggerare una pipeline su un altro repository di Azure DevOps
Selettore CSS :has() e i suoi casi d'uso avanzati
Utilizzare Hybrid Cache in .NET 9
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Gestire codice JavaScript con code splitting e lazy loading
Introduzione ai web component HTML
Implementare il throttle in JavaScript
Bloccare l'esecuzione di un pod in mancanza di un'artifact attestation di GitHub
Utilizzare DeepSeek R1 con Azure AI
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Recuperare gli audit log in Azure DevOps