Estensione di markup {Binding}
Nota
È disponibile un nuovo meccanismo di associazione per Windows 10, ottimizzato per le prestazioni e la produttività degli sviluppatori. Vedere estensione di markup {x:Bind}.
Nota
Per informazioni generali sull'uso del data binding nella tua app con {Binding} (e per un confronto completo 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à di destinazione di un'associazione dati deve essere una proprietà di dipendenza. Per altre informazioni, vedere Panoramica sulle 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. |
Proprietà di associazione | propName=valore[, propName=valore]* Una o più proprietà di associazione specificate usano una sintassi di coppia nome/valore. |
propName | Nome stringa della proprietà da impostare sull'oggetto Binding. Ad esempio, "Convertitore". |
value | Il valore per cui impostare la proprietà. La sintassi dell'argomento dipende dalla proprietà di 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].Players", dove il valore letterale "[]" racchiude "0" che specifica il primo elemento di una raccolta.
Quando si usa un'associazione ElementName a un DependencyObjectesistente, è 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 un 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 è possibile 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, vedere la 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 la cultura da utilizzare dal convertitore. (Se si sta impostando Convertitore). Le impostazioni cultura sono impostate come identificatore basato su standard. Per altre info, vedere 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. È possibile scrivere un convertitore che usa valori diversi dalle stringhe, ma questo non è comune, vedere 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à associazione, come uno di questi valori: "OneTime", "OneWay" o "TwoWay". Corrispondono ai nomi costanti dell'enumerazione BindingMode. L'impostazione predefinita è "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'oggetto origine dati. 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 più approfondite vedere DataContext o Data binding. |
TargetNullValue | Specifica un valore da visualizzare quando il valore di origine viene risolto ma è esplicitamente Null. |
UpdateSourceTrigger | Specifica gli intervalli di tempo degli aggiornamenti delle origini di associazione. Se non è specificato, il valore predefinito è Default. |
Nota Se si sta convertendo markup da {x:Bind} a {Binding}, tenere 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, vedere 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 da valori booleani a Visibility. Il convertitore esegue il mapping true al valore di enumerazione Visible e false a Collapsed, quindi puoi associare una proprietà Visibility a un valore booleano 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, farlo precedere da 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, Path viene visualizzato in modo esplicito denominato come proprietà pinding. The Path viene valutato in un'origine di data binding che è un altro oggetto nello stesso albero di oggetti di runtime, uno Slider denominato sliderValueConverter
.
Si noti che il valore della proprietà Converter usa un'altra estensione di markup, estensione di markup {StaticResource}, 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 per 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. Andare alla definizione (F12) funziona anche con {Binding}. In alternativa, è possibile usare la finestra di dialogo data binding.