WPF: dal DataBinding ai Template - Prima parte

5 pagine in totale: <<Indietro 1 2 3 [4] 5 Avanti >>

Nel caso non sia specificata la "direzione" del binding, WPF utilizza la modalità specificata nei metadati associati alla proprietà destinazione del binding, nel nostro caso la DependecyProperty TextProperty . Per conoscere programmaticamente quale modalità sia impostata di default è necessario ricorrere al metodo GetMetadata esposto da ogni DependecyProperty.

bool _twoWay =  ((FrameworkPropertyMetadata)TextBox.TextProperty.GetMetadata(MyTextBox)).BindsTwoWayByDefault;

Il metodo restituisce un'istanza del tipo PropertyMetaData. Questa classe è usata tipicamente durante la fase di registrazione di una DependecyProperty, ma in alcuni casi, come nel nostro, può verificarsi che al suo posto sia usata la classe FrameworkPropertyMetadata. Questo tipo offre una serie di proprietà orientate a semplificare l'analisi delle caratteristiche delle DependecyProperty.

Nel nostro esempio, nelle modalità TwoWay e OneWayToSource ogni modifica apportata alla proprietà destinazione si propaga fino a quella sorgente solo quando la TextBox perde il focus. La precedente modalità di notifica prende il nome di LostFocus ,le altre disponibili sono: PropertyChanged che aggiorna la sorgente ogni qualvolta la proprietà destinazione viene modificata e Explicit. In quest'ultima modalità l'aggiornamento della sorgente avviene solamente in modo programmatico, richiamando il metodo UpdateSource della classe BindingExpression.

Per recuperare un'istanza del tipo BindingExpression usiamo il metodo statico GetBindingExpression esposto dalla classe BindingOperations o l'omonimo metodo esposto dalla classe FrameworkElement. Impostiamo la proprietà UpdateSourceTrigger a Explicit, aggiungiamo un bottone e scriviamo un event handler per l'evento Click.

public MyWindow ()
{
    InitializeComponent();

    Binding _binding = new Binding();
    _binding.Source = MyScroll;
    _binding.Path = new PropertyPath("Value");
    _binding.UpdateSourceTrigger = UpdateSourceTrigger.Explicit;

    BindingOperations.SetBinding(MyTextBox, TextBox.TextProperty, _binding);
}

void Update(object sender, RoutedEventArgs e)
{
    MyTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
}

Esempio di binding TextBox/Slider

5 pagine in totale: <<Indietro 1 2 3 [4] 5 Avanti >>

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.
Nick60 scrive:
WPF: dal DataBinding ai Template - Prima parte

L'articolo è ottimo.Vorrei solo suggerire, per rendere il sorgente XAML più semplice e focalizzare l'attenzione del lettore sul tema trattato, di ...
giovedì 1 maggio 2008 | 1 risposta

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.



TUTORIALS


IN EVIDENZA
MISC