Utilizzare l'evento DataContextChanged in Silverlight 5.0

di Alessio Leoncini, in Silverlight 5.0,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi