Condividi tramite


Estensione di markup {Binding} (markup extension)

Annotazioni

È 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}.

Annotazioni

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 binding acquisisce un valore da una proprietà in un'origine dati e lo trasmette alla proprietà del 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 trasmettere le modifiche del valore di controllo alla 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 degli attributi XAML

<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
Termine Description
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à della classe Binding che può essere impostata nella 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 i familiari di un dipendente, il percorso della proprietà potrebbe essere "Employee.Dependents" e il modello di elemento del controllo elementi si occuperà di visualizzare gli elementi in "Familiari".

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} è 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 coppiedi valori= 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à Description
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 la cultura da utilizzare dal convertitore. Se stai impostando Converter, la cultura è impostata come un identificatore basato su standard. Per altre info, vedi ConverterLanguage
ConverterParameter Specifica un parametro del convertitore che può essere usato nella logica del convertitore. Se stai impostando Converter. 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.
Modo 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}.
Fonte 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.

Annotazioni

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.

Annotazioni

A partire da Windows 10, versione 1607, il framework XAML fornisce un convertitore da Boolean a Visibility predefinito. 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 integrato, la versione minima dell'SDK di destinazione dell'app deve essere 14393 o successiva. Non puoi usarla quando la tua app è destinata a versioni precedenti di Windows 10. Per altre informazioni sulle versioni di destinazione, vedi Codice adattivo della versione.

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

Suggerimento

Se hai bisogno di specificare una parentesi graffa singola per un valore, come in Path o ConverterParameter, precedila con un backslash: \{. 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 come origine di binding dati che è un altro oggetto nello stesso albero di oggetti di runtime, uno Slider denominato sliderValueConverter.

Si noti che il valore della proprietà Converter utilizza un'altra estensione di markup, l'estensione di markup {StaticResource}, quindi ci sono due utilizzi annidati di estensione di markup in questo caso. Il valore interno viene valutato per primo, in modo che, una volta ottenuta la risorsa, ci sia un IValueConverter pratico (una classe personalizzata istanziata dall'elemento local:S2Formatter nelle risorse) che il binding può utilizzare.

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 digiti "{Binding", le proprietà del contesto dati appropriate per Path vengono visualizzate nel menu a tendina. 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.