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
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Utilizzare una qualunque lista per i parametri di tipo params in C#
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Creare una libreria CSS universale: i bottoni
Recuperare App Service cancellati su Azure
Utilizzare Copilot con Azure Cosmos DB
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Supportare la sessione affinity di Azure App Service con Application Gateway
Eliminare una project wiki di Azure DevOps