Estensione di markup {Binding}

Nota

È disponibile un nuovo meccanismo di associazione per Windows 10, ottimizzato per le prestazioni e la produttività degli sviluppatori. Vedere l'estensione di markup {x:Bind}.

Nota

Per informazioni generali sull'uso del data binding nell'app con {Binding} (e per un confronto all-up tra {x:Bind} e {Binding}), vedi Informazioni approfondite sul data binding.

L'estensione di markup {Binding} viene usata per associare dati alle proprietà dei controlli ai valori provenienti da un'origine dati, ad esempio il codice. L'estensione di markup {Binding} viene convertita in fase di caricamento XAML in un'istanza della classe Binding . Questo oggetto di associazione ottiene un valore da una proprietà in un'origine dati e lo inserisce nella proprietà nel controllo . L'oggetto di associazione può essere configurato facoltativamente per osservare le modifiche apportate al valore della proprietà dell'origine dati e aggiornarsi in base a tali modifiche. Può anche essere configurato facoltativamente per eseguire il push delle modifiche al valore del controllo nella proprietà di origine. La proprietà che rappresenta la destinazione di un data binding deve essere una proprietà di dipendenza. Per altre info, vedi Panoramica delle proprietà di dipendenza.

{Binding} ha la stessa precedenza della proprietà di dipendenza di un valore locale e l'impostazione di un valore locale nel codice imperativo rimuove l'effetto di qualsiasi {Binding} impostato nel markup.

Utilizzo attributo XAML

<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
Termine Descrizione
Propertypath Stringa che specifica il percorso della proprietà per l'associazione. Altre informazioni sono disponibili nella sezione Percorso proprietà di seguito.
bindingProperties propName=value[, propName=value]*
Una o più proprietà di associazione specificate usando una sintassi di coppia nome/valore.
propName Nome stringa della proprietà da impostare sull'oggetto Binding . Ad esempio, "Convertitore".
value Valore su cui impostare la proprietà. La sintassi dell'argomento dipende dalla proprietà proprietà della classe Binding che può essere impostata con la sezione {Binding} riportata di seguito.

Percorso proprietà

Path descrive la proprietà a cui si sta eseguendo il binding (proprietà di origine). Path è un parametro posizionale, ovvero è possibile usare il nome del parametro in modo esplicito ({Binding Path=EmployeeID}) oppure specificarlo come primo parametro senza nome ({Binding EmployeeID}).

Il tipo di Path è un percorso di proprietà, ovvero una stringa che restituisce una proprietà o una sottoproprietà del tipo personalizzato o di un tipo di framework. Il tipo può essere, ma non deve essere un DependencyObject. I passaggi in un percorso di proprietà sono delimitati da punti (.) ed è possibile includere più delimitatori per attraversare le sottoproprietà successive. Usare il delimitatore punto indipendentemente dal linguaggio di programmazione usato per implementare l'oggetto a cui è associato.

Ad esempio, per associare l'interfaccia utente alla proprietà nome di un oggetto dipendente, il percorso della proprietà potrebbe essere "Employee.FirstName". Se si associa un controllo elementi a una proprietà che contiene dipendenti di un dipendente, il percorso della proprietà potrebbe essere "Employee.Dependents" e il modello di elemento del controllo elementi si occupa della visualizzazione degli elementi in "Dipendenti".

Se l'origine dati è una raccolta, un percorso di proprietà può specificare gli elementi nella raccolta in base alla posizione o all'indice. Ad esempio, "Teams[0]. Giocatori", dove il valore letterale "[]" racchiude "0" che specifica il primo elemento di una raccolta.

Quando si usa un'associazione ElementName a un DependencyObject esistente, è possibile usare le proprietà associate come parte del percorso della proprietà. Per disambiguare una proprietà associata in modo che il punto intermedio nel nome della proprietà associata non venga considerato un passaggio in un percorso di proprietà, racchiudere tra parentesi il nome della proprietà associata qualificato dal proprietario; ad esempio . (AutomationProperties.Name)

Un oggetto intermedio percorso proprietà viene archiviato come oggetto PropertyPath in una rappresentazione in fase di esecuzione, ma la maggior parte degli scenari non dovrà interagire con un oggetto PropertyPath nel codice. In genere puoi specificare le informazioni di associazione necessarie usando XAML.

Per altre info sulla sintassi delle stringhe per un percorso di proprietà, i percorsi delle proprietà nelle aree delle funzionalità di animazione e la costruzione di un oggetto PropertyPath, vedi Sintassi property-path.

Proprietà della classe Binding che può essere impostata con {Binding}

{Binding} viene illustrato con la sintassi segnaposto bindingProperties perché sono presenti più proprietà di lettura/scrittura di un binding che è possibile impostare nell'estensione di markup. Le proprietà possono essere impostate in qualsiasi ordine con coppie di valori propName=delimitate da virgole. Alcune delle proprietà richiedono tipi che non dispongono di una conversione dei tipi, quindi richiedono estensioni di markup personalizzate annidate all'interno di {Binding}.

Proprietà Descrizione
Percorso Vedere la sezione Percorso proprietà sopra.
Convertitore Specifica un oggetto convertitore chiamato dal motore di associazione. Il convertitore può essere impostato nel markup usando l'estensione di markup {StaticResource} per fare riferimento a tale oggetto da un dizionario risorse.
ConverterLanguage Specifica le impostazioni cultura da utilizzare dal convertitore. (Se si sta impostando Convertitore. Le impostazioni cultura sono impostate come identificatore basato su standard. Per altre info, vedi ConverterLanguage
ConverterParameter Specifica un parametro del convertitore che può essere usato nella logica del convertitore. (Se si sta impostando Convertitore. La maggior parte dei convertitori usa una logica semplice che ottiene tutte le informazioni necessarie dal valore passato per la conversione e non richiede un valore ConverterParameter . Il parametro ConverterParameter è destinato a implementazioni di convertitori più complesse con logica condizionale che disattivano ciò che viene passato in ConverterParameter. Puoi scrivere un convertitore che usa valori diversi dalle stringhe, ma questo non è comune, vedi Osservazioni in ConverterParameter per altre info.
ElementName Specifica un'origine dati facendo riferimento a un altro elemento nello stesso costrutto XAML con una proprietà Name o un attributo x:Name. Viene spesso usato per condividere valori correlati o usare le sottoproprietà di un elemento dell'interfaccia utente per fornire un valore specifico per un altro elemento, ad esempio in un modello di controllo XAML.
FallbackValue Specifica un valore da visualizzare quando non è possibile risolvere l'origine o il percorso.
Modalità Specifica la modalità di associazione, come uno di questi valori: "OneTime", "OneWay" o "TwoWay". Corrispondono ai nomi costanti dell'enumerazione BindingMode . Il valore predefinito è "OneWay". Si noti che questo comportamento è diverso dal valore predefinito per {x:Bind}, ovvero "OneTime".
Relativesource Specifica un'origine dati descrivendo la posizione dell'origine di associazione rispetto alla posizione della destinazione di associazione. Questa operazione viene spesso usata nelle associazioni all'interno dei modelli di controllo XAML. Impostazione dell'estensione di markup {RelativeSource}.
Origine Specifica l'origine dati dell'oggetto. All'interno dell'estensione di markup Binding, la proprietà Source richiede un riferimento a un oggetto, ad esempio un riferimento all'estensione di markup {StaticResource}. Se questa proprietà non viene specificata, il contesto dei dati che agisce specifica l'origine. È più tipico non specificare un valore di origine in singole associazioni e basarsi invece sul DataContext condiviso per più associazioni. Per altre informazioni, vedi DataContext o Data binding in modo approfondito.
TargetNullValue Specifica un valore da visualizzare quando il valore di origine viene risolto ma è esplicitamente Null.
UpdateSourceTrigger Specifica l'intervallo di aggiornamento dell'origine dell'associazione. Se non specificato, il valore predefinito è Default.

Nota Se stai convertendo markup da {x:Bind} a {Binding}, tieni presente le differenze nei valori predefiniti per la proprietà Mode .

Converter, ConverterLanguage e ConverterLanguage sono tutti correlati allo scenario di conversione di un valore o di un tipo dall'origine di associazione in un tipo o valore compatibile con la proprietà di destinazione dell'associazione. Per altre info ed esempi, vedi la sezione "Conversioni dei dati" di Data binding in modo approfondito.

Nota

A partire da Windows 10 versione 1607, il framework XAML fornisce un convertitore booleano predefinito per visibility. Il convertitore esegue il mapping true al valore di enumerazione Visible e false a Collapsed in modo da poter associare una proprietà Visibility a un valore Boolean senza creare un convertitore. Per usare il convertitore predefinito, la versione minima dell'SDK di destinazione dell'app deve essere 14393 o successiva. Non è possibile usarlo quando l'app è destinata alle versioni precedenti di Windows 10. Per altre info sulle versioni di destinazione, vedere Codice adattivo per la versione.

Source, RelativeSource e ElementName specificano un'origine di associazione, quindi si escludono a vicenda.

Suggerimento Se è necessario specificare una singola parentesi graffa per un valore, ad esempio in Path o ConverterParameter, precederlo con una barra rovesciata: \{. In alternativa, racchiudere l'intera stringa contenente le parentesi graffe che richiedono l'escape in un set di virgolette secondarie, ad esempio ConverterParameter='{Mix}'.

Esempi

<!-- binding a UI element to a view model -->    
<Page ... >
    <Page.DataContext>
        <local:BookstoreViewModel/>
    </Page.DataContext>

    <GridView ItemsSource="{Binding BookSkus}" SelectedItem="{Binding SelectedBookSku, Mode=TwoWay}" ... />
</Page>
<!-- binding a UI element to another UI element -->
<Page ... >
    <Page.Resources>
        <local:S2Formatter x:Key="GradeConverter"/>
    </Page.Resources>

    <Slider x:Name="sliderValueConverter" ... />
    <TextBox Text="{Binding Path=Value, ElementName=sliderValueConverter,
        Mode=OneWay,
        Converter={StaticResource GradeConverter}}"/>
</Page>

Il secondo esempio imposta quattro proprietà di binding diverse: ElementName, Path, Mode e Converter. In questo caso, il percorso viene visualizzato in modo esplicito denominato come proprietà Binding . Path viene valutato in un'origine di data binding che è un altro oggetto nello stesso albero di oggetti di runtime, un dispositivo di scorrimento denominato sliderValueConverter.

Si noti che il valore della proprietà Converter usa un'altra estensione di markup, {StaticResource} estensione di markup, quindi sono disponibili due utilizzi di estensione di markup annidati qui. Il valore interno viene valutato per primo, in modo che, una volta ottenuta la risorsa, sia presente un IValueConverter pratico (una classe personalizzata di cui è stata creata un'istanza dall'elemento local:S2Formatter nelle risorse) che l'associazione può usare.

Supporto degli strumenti

Microsoft IntelliSense in Microsoft Visual Studio visualizza le proprietà del contesto dati durante la creazione di {Binding} nell'editor di markup XAML. Non appena si digita "{Binding", le proprietà del contesto dati appropriate per Path vengono visualizzate nell'elenco a discesa. IntelliSense consente anche di usare le altre proprietà di Binding. Per il corretto funzionamento, è necessario disporre del contesto dati o del contesto dati in fase di progettazione impostato nella pagina di markup. Vai a definizione (F12) funziona anche con {Binding}. In alternativa, è possibile usare la finestra di dialogo data binding.