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
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Gestire la cancellazione di una richiesta in streaming da Blazor
Gestione dell'annidamento delle regole dei layer in CSS
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Utilizzare Azure AI Studio per testare i modelli AI
Triggerare una pipeline su un altro repository di Azure DevOps
Usare il colore CSS per migliorare lo stile della pagina
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Creare una libreria CSS universale: Nav menu
Gestione CSS in Blazor con .NET 9