Estensione di markup {Binding}{Binding} markup extension

Nota

È disponibile un nuovo meccanismo di associazione per Windows 10, ottimizzato per le prestazioni e la produttività degli sviluppatori.A new binding mechanism is available for Windows 10, which is optimized for performance and developer productivity. Vedere {x:bind} Markup Extension.See {x:Bind} markup extension.

Nota

Per informazioni generali sull'uso di data binding nell'app con {Binding} (e per un confronto totale tra {X:bind} e {Binding}), vedere Data Binding in Depth.For general info about using data binding in your app with {Binding} (and for an all-up comparison between {x:Bind} and {Binding}), see Data binding in depth.

L'estensione di markup {Binding} viene usata per associare le proprietà dei controlli ai valori provenienti da un'origine dati, ad esempio il codice.The {Binding} markup extension is used to data bind properties on controls to values coming from a data source such as code. L'estensione di markup {Binding} viene convertita in fase di caricamento XAML in un'istanza della classe di associazione .The {Binding} markup extension is converted at XAML load time into an instance of the Binding class. Questo oggetto di binding ottiene un valore da una proprietà in un'origine dati e ne effettua il push alla proprietà nel controllo.This binding object gets a value from a property on a data source, and pushes it to the property on the control. L'oggetto di binding può essere configurato per osservare le modifiche nel valore della proprietà dell'origine dati e aggiornarsi in base a quelle modifiche.The binding object can optionally be configured to observe changes in the value of the data source property and update itself based on those changes. Può essere configurato anche per rieffettuare il push delle modifiche nel valore del controllo alla proprietà di origine.It can also optionally be configured to push changes to the control value back to the source property. La proprietà che costituisce la destinazione del data binding deve essere una proprietà di dipendenza.The property that is the target of a data binding must be a dependency property. Per altre info, vedi Panoramica delle proprietà di dipendenza.For more info, see Dependency properties overview.

{Binding} ha la stessa precedenza della proprietà di dipendenza di un valore locale e l'impostazione di un valore locale nel codice imperativo annulla la validità di qualsiasi oggetto {Binding} impostato nel markup.{Binding} has the same dependency property precedence as a local value, and setting a local value in imperative code removes the effect of any {Binding} set in markup.

Sintassi degli attributi XAMLXAML attribute usage

<object property="{Binding}" .../>
-or-
<object property="{Binding propertyPath}" .../>
-or-
<object property="{Binding bindingProperties}" .../>
-or-
<object property="{Binding propertyPath, bindingProperties}" .../>
TermineTerm DescrizioneDescription
propertyPathpropertyPath Stringa che specifica il percorso della proprietà per il binding.A string that specifies the property path for the binding. Altre info sono disponibili nella sezione Percorso delle proprietà seguente.More info is in the Property path section below.
bindingPropertiesbindingProperties propName = valore [ , valore propName = value]*propName=value[, propName=value]*
Una o più proprietà di binding che vengono specificate usando una sintassi di coppie nome/valore.One or more binding properties that are specified using a name/value pair syntax.
propNamepropName Nome di stringa della proprietà da impostare sull'oggetto di associazione .The string name of the property to set on the Binding object. ad esempio "Converter".For example, "Converter".
valuevalue Valore su cui impostare la proprietà.The value to set the property to. La sintassi dell’argomento dipende dalla proprietà come illustrato nella sezione Proprietà della classe Binding che è possibile impostare con {Binding} più avanti.The syntax of the argument depends on the property of Properties of the Binding class that can be set with {Binding} section below.

Percorso proprietàProperty path

Path descrive la proprietà a cui si sta eseguendo l'associazione (la proprietà Source).Path describes the property that you're binding to (the source property). Path è un parametro posizionale, ovvero è possibile usare il nome del parametro in modo esplicito ({Binding Path=EmployeeID}) oppure è possibile specificarlo come primo parametro senza nome ({Binding EmployeeID}).Path is a positional parameter, which means you can use the parameter name explicitly ({Binding Path=EmployeeID}), or you can specify it as the first unnamed parameter ({Binding EmployeeID}).

Il tipo di Path è un percorso di proprietà, ovvero una stringa che restituisce una proprietà o una proprietà secondaria del tipo personalizzato o di un tipo di framework.The type of Path is a property path, which is a string that evaluates to a property or sub-property of either your custom type or a framework type. Il tipo può essere, ma non necessariamente, un oggetto DependencyObject.The type can be, but does not need to be, a DependencyObject. I passaggi di un percorso di proprietà sono delimitati da punti (.) e puoi includere più delimitatori per attraversare le proprietà secondarie successive.Steps in a property path are delimited by dots (.), and you can include multiple delimiters to traverse successive sub-properties. Usa il delimitatore punto indipendentemente dal linguaggio di programmazione usato per implementare l'oggetto a cui viene eseguito il binding.Use the dot delimiter regardless of the programming language used to implement the object being bound to.

Ad esempio, per il binding dell'interfaccia utente alla proprietà del nome di un oggetto dipendente, il percorso della proprietà potrebbe essere "Employee.FirstName".For example, to bind UI to an employee object's first name property, your property path might be "Employee.FirstName". Se stai eseguendo il binding di un controllo elementi a una proprietà contenente gli elementi che dipendono dal dipendente, il percorso della proprietà potrebbe essere "Employee.Dependents". Un modello di elemento del controllo elementi si occuperà della visualizzazione degli elementi in "Dependents".If you are binding an items control to a property that contains an employee's dependents, your property path might be "Employee.Dependents", and the item template of the items control would take care of displaying the items in "Dependents".

Se l'origine dati è una raccolta, un percorso di proprietà può specificare gli elementi della raccolta in base alla posizione o all'indice.If the data source is a collection, then a property path can specify items in the collection by their position or index. Ad esempio, "Teams [ 0 ] . Players ", dove il valore letterale" [ ] "racchiude" 0 "che specifica il primo elemento di una raccolta.For example, "Teams[0].Players", where the literal "[]" encloses the "0" that specifies the first item in a collection.

Quando si utilizza un'associazione ElementName a un oggetto DependencyObjectesistente, è possibile utilizzare le proprietà associate come parte del percorso della proprietà.When using an ElementName binding to an existing DependencyObject, you can use attached properties as part of the property path. Per evitare ambiguità con una proprietà associata, in modo che il punto intermedio nel nome della proprietà associata non venga considerato un passaggio di un percorso di proprietà, racchiudi tra parentesi il nome della proprietà associata qualificato dal proprietario, ad esempio, (AutomationProperties.Name).To disambiguate an attached property so that the intermediate dot in the attached property name is not considered a step into a property path, put parentheses around the owner-qualified attached property name; for example, (AutomationProperties.Name).

L’oggetto intermedio di un percorso di proprietà viene archiviato come oggetto PropertyPath in una rappresentazione di runtime, ma la maggior parte degli scenari non deve interagire con un oggetto PropertyPath nel codice.A property path intermediate object is stored as a PropertyPath object in a run-time representation, but most scenarios won't need to interact with a PropertyPath object in code. In genere puoi specificare le informazioni di binding necessarie usando XAML.You can usually specify the binding info you need using XAML.

Per altre info sulla sintassi delle stringhe per un percorso delle proprietà, sui percorsi delle proprietà nelle aree di funzionalità di animazione e sulla costruzione di un oggetto PropertyPath, vedi Sintassi di PropertyPath.For more info about the string syntax for a property path, property paths in animation feature areas, and constructing a PropertyPath object, see Property-path syntax.

Proprietà della classe Binding che è possibile impostare con {Binding}Properties of the Binding class that can be set with {Binding}

L'oggetto {Binding} viene illustrato con la sintassi del segnaposto bindingProperties perché ci sono più proprietà di lettura/scrittura di un oggetto Binding che è possibile impostare nell'estensione di markup.{Binding} is illustrated with the bindingProperties placeholder syntax because there are multiple read/write properties of a Binding that can be set in the markup extension. Le proprietà possono essere impostate in qualsiasi ordine con le coppie di valori propNameseparate da virgole = value .The properties can be set in any order with comma-separated propName=value pairs. Alcune delle proprietà richiedono tipi che non hanno una conversione di tipi e quindi necessitano di estensioni di markup specifiche annidate in {Binding}.Some of the properties require types that don't have a type conversion, so these require markup extensions of their own nested within the {Binding}.

ProprietàProperty DescrizioneDescription
PercorsoPath Vedi la sezione Percorso delle proprietà precedente.See the Property path section above.
ConverterConverter Specifica un oggetto convertitore che viene chiamato dal motore di binding.Specifies a converter object that is called by the binding engine. Il convertitore può essere impostato nel markup usando l'estensione di markup {StaticResource} per fare riferimento a tale oggetto da un dizionario risorse.The converter can be set in markup using the {StaticResource} markup extension to reference to that object from a resource dictionary.
ConverterLanguageConverterLanguage Specifica le impostazioni cultura che devono essere usate dal convertitoreSpecifies the culture to be used by the converter. (se imposti Converter). Le impostazioni cultura vengono specificate come identificatore basato su standard.(If you're setting Converter.) The culture is set as a standards-based identifier. Per altre informazioni, vedere ConverterLanguageFor more info, see ConverterLanguage
ConverterParameterConverterParameter Specifica un parametro convertitore che è possibile usare nella logica del convertitoreSpecifies a converter parameter that can be used in converter logic. (se imposti Converter). La maggior parte dei convertitori usa una logica semplice per ottenere tutte le info necessarie dal valore passato per la conversione e non richiede un valore ConverterParameter.(If you're setting Converter.) Most converters use simple logic that get all the info they need from the passed value to convert, and don't need a ConverterParameter value. Il parametro ConverterParameter è destinato a implementazioni di convertitori più complesse con una logica specifica per quanto viene passato in ConverterParameter.The ConverterParameter parameter is for more complex converter implementations that have conditional logic that keys off what's passed in ConverterParameter. Puoi anche scrivere un convertitore che usi valori diversi dalle stringhe, ma è insolito. Per altre info, vedi Osservazioni in ConverterParameter.You can write a converter that uses values other than strings but this is uncommon, see Remarks in ConverterParameter for more info.
ElementNameElementName Specifica un’origine dati facendo riferimento a un altro elemento nello stesso costrutto XAML che ha una proprietà Name o un attributo x:Name.Specifies a data source by referencing another element in the same XAML construct that has a Name property or x:Name attribute. Questo spesso permette di condividere valori correlati o di usare proprietà secondarie di un elemento dell'interfaccia utente per fornire un valore specifico per un altro elemento, ad esempio in un modello di controllo XAML.This is often use to share related values or use sub-properties of one UI element to provide a specific value for another element, for example in a XAML control template.
FallbackValueFallbackValue Specifica un valore da visualizzare quando non è possibile risolvere l'origine o il percorso.Specifies a value to display when the source or path cannot be resolved.
ModeMode Specifica la modalità di binding con uno dei valori seguenti: "OneTime", "OneWay" o "TwoWay".Specifies the binding mode, as one of these values: "OneTime", "OneWay", or "TwoWay". Questi corrispondono ai nomi costanti dell'enumerazione BindingMode .These correspond to the constant names of the BindingMode enumeration. Il valore predefinito è "OneWay".The default is "OneWay". Nota che questa impostazione è diversa dall’impostazione predefinita per {x:Bind}, che è "OneTime".Note that this differs from the default for {x:Bind}, which is "OneTime".
RelativeSourceRelativeSource Specifica un'origine dati descrivendo la posizione dell'origine del binding relativamente alla posizione della destinazione del binding.Specifies a data source by describing the position of the binding source relative to the position of the binding target. Viene usata più spesso nei binding all'interno dei modelli di controllo XAML.This is most often used in bindings within XAML control templates. Impostazione dell'estensione di markup {RelativeSource}.Setting the {RelativeSource} markup extension.
Source (Sorgente)Source Specifica l'origine dati dell'oggetto.Specifies the object data source. All'interno dell'estensione del markup Binding, la proprietà Source richiede un riferimento a un oggetto, ad esempio un riferimento all'estensione di markup {StaticResource}.Within the Binding markup extension, the Source property requires an object reference, such as a {StaticResource} markup extension reference. Se questa proprietà non è specificata, il contesto dei dati in azione specifica l'origine.If this property is not specified, the acting data context specifies the source. È più comune non specificare un valore Source nei singoli binding e usare invece l'elemento DataContext condiviso per più binding.It's more typical to not specify a Source value in individual bindings, and instead to rely on the shared DataContext for multiple bindings. Per altre info, vedi DataContext o Informazioni approfondite sul data binding.For more info see DataContext or Data binding in depth.
TargetNullValueTargetNullValue Specifica un valore da visualizzare quando il valore dell’origine viene risolto, ma è esplicitamente null.Specifies a value to display when the source value resolves but is explicitly null.
UpdateSourceTriggerUpdateSourceTrigger Specifica quando eseguire gli aggiornamenti dell'origine del binding.Specifies the timing of binding source updates. Se la proprietà non viene specificata, il valore predefinito è Default.If unspecified, the default is Default.

Nota    Se si converte il markup da {x:bind} a {Binding}, tenere presente le differenze nei valori predefiniti per la proprietà mode .Note  If you're converting markup from {x:Bind} to {Binding}, then be aware of the differences in default values for the Mode property.

Le proprietà Converter, ConverterLanguage e ConverterLanguage sono tutte correlate allo scenario di conversione di un valore o tipo dall’origine di binding a un tipo o valore compatibile con la proprietà di destinazione del binding.Converter, ConverterLanguage and ConverterLanguage are all related to the scenario of converting a value or type from the binding source into a type or value that is compatible with the binding target property. Per altre info ed esempi, vedi la sezione "Conversioni dati" dell'argomento Informazioni approfondite sul data binding.For more info and examples, see the "Data conversions" section of Data binding in depth.

Nota

A partire da Windows 10 versione 1607, il framework XAML fornisce un valore booleano predefinito per il convertitore Visibility.Starting in Windows 10, version 1607, the XAML framework provides a built in Boolean to Visibility converter. Il convertitore esegue il mapping true al valore di enumerazione visibile e false a compresso , in modo da poter associare una proprietà Visibility a un valore booleano senza creare un convertitore.The converter maps true to the Visible enumeration value and false to Collapsed so you can bind a Visibility property to a Boolean without creating a converter. Per usare il convertitore predefinito, la versione minima dell'SDK di destinazione dell'app deve essere 14393 o successiva.To use the built in converter, your app's minimum target SDK version must be 14393 or later. Non puoi usarlo quando l'app è destinata alle versioni precedenti di Windows 10.You can't use it when your app targets earlier versions of Windows 10. Per altre info sulle versioni di destinazione, vedi Codice adattivo per la versione.For more info about target versions, see Version adaptive code.

Source, RelativeSource e ElementName specificano un'origine del binding e quindi si escludono reciprocamente.Source, RelativeSource, and ElementName specify a binding source, so they are mutually exclusive.

Suggerimento    Se è necessario specificare una parentesi graffa singola per un valore, ad esempio in path o ConverterParameter, quindi precederla con una barra rovesciata: \{ .Tip  If you need to specify a single curly brace for a value, such as in Path or ConverterParameter, then precede it with a backslash: \{. In alternativa, racchiudi l’intera stringa che contiene le parentesi graffe che richiedono l’escape in un set di virgolette secondario, ad esempio ConverterParameter='{Mix}'.Alternatively, enclose the entire string that contains the braces that need escaping in a secondary quotation set, for example ConverterParameter='{Mix}'.

EsempiExamples

<!-- 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 diverse proprietà di Binding, ovvero ElementName, Path, Mode e Converter.The second example sets four different Binding properties: ElementName, Path, Mode and Converter. In questo caso la proprietà Path viene esplicitamente indicata come proprietà di Binding.Path in this case is shown explicitly named as a Binding property. La proprietà Path viene valutata rispetto a un’origine di data binding, costituita da un altro oggetto nello stesso albero di oggetti di runtime, ovvero un oggetto Slider denominato sliderValueConverter.The Path is evaluated to a data binding source that is another object in the same run-time object tree, a Slider named sliderValueConverter.

Nota come il valore della proprietà Converter usi un’altra estensione di markup, {StaticResource}. In questo esempio vengono quindi usate due estensioni di markup annidate.Note how the Converter property value uses another markup extension, {StaticResource} markup extension, so there are two nested markup extension usages here. Quella interna viene valutata per prima, di modo che quando viene ottenuta la risorsa sia disponibile un oggetto IValueConverter pratico (una classe personalizzata di cui viene creata un’istanza dall’elemento local:S2Formatter nelle risorse) utilizzabile dal binding.The inner one is evaluated first, so that once the resource is obtained there's a practical IValueConverter (a custom class that's instantiated by the local:S2Formatter element in resources) that the binding can use.

Supporto degli strumentiTools support

Microsoft IntelliSense in Microsoft Visual Studio visualizza le proprietà del contesto dei dati durante la creazione di {Binding} nell’editor di markup XAML.Microsoft IntelliSense in Microsoft Visual Studio displays the properties of the data context while authoring {Binding} in the XAML markup editor. Non appena si digita "{binding", le proprietà di contesto dei dati appropriate per path vengono visualizzate nell'elenco a discesa.As soon as you type "{Binding", data context properties appropriate for Path are displayed in the dropdown. IntelliSense consente inoltre di usare le altre proprietà dell' associazione.IntelliSense also helps with the other properties of Binding. Perché funzioni, devi avere il contesto dei dati o il contesto dei dati della fase di progettazione impostato nella pagina di markup.For this to work, you must have either the data context or the design-time data context set in the markup page. Anche Vai a definizione (F12) funziona con {Binding}.Go To Definition (F12) also works with {Binding}. In alternativa, puoi usare la finestra di dialogo del data binding.Alternatively, you can use the data binding dialog.