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
Assegnare un valore di default a un parametro di una lambda in C#
Aggiungere interattività lato server in Blazor 8
Utilizzare un service principal per accedere a Azure Container Registry
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Load test di ASP.NET Core con k6
Creare una custom property in GitHub
Configurare policy CORS in Azure Container Apps
Eseguire operazioni sui blob con Azure Storage Actions
Creare form tipizzati con Angular
Creare alias per tipi generici e tuple in C#
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Generare token per autenicarsi sulle API di GitHub