La liaison (Binding) est une fonctionnalité puissante dans WPF, permettant de lier les propriétés d'un objet source à celles d'un objet cible. Lors de la déclaration d'une liaison dans XAML, on utilise l'extension de balisage Binding, suivie de plusieurs clauses séparées par des virgules. Ces clauses sont composées de paires nom=valeur, où nom désigne le nom de la propriété liée et valeur spécifie la valeur de la liaison. L'ordre des clauses n'a pas d'importance et il existe de nombreuses combinaisons possibles pour personnaliser la liaison selon les besoins.
Lorsque vous créez des chaînes de déclaration de liaison dans le balisage, elles doivent être jointes à la propriété de dépendance spécifique d’un objet cible. L’exemple suivant montre comment lier la TextBox.Text propriété à l’aide de l’extension de liaison, en spécifiant les Source Propriétés et Path . XAML
<TextBlock Text="{Binding Source={StaticResource myDataSource}, Path=Name}"/>
Vous pouvez spécifier la plupart des propriétés de la Binding classe de cette manière.
(doc MS)
(Binding class)
Name | Description | Valeur d'éxemple |
---|---|---|
Source | L'objet à utiliser comme source de liaison | personDetails |
Mode | Spécifie le sens de la liaison | BindingMode.TwoWay |
Converter | Le convertisseur à utiliser | NameConverter.Instance |
ConverterCulture | La langue du convertisseur | CultureInfo("fr-FR") |
Path | Le chemin d'accès à la propriété source de la liaison | personDetails |
IsAsync | Valeur qui indique si le Binding doit obtenir et définir des valeurs de manière asynchrone | True |
Delay | Obtient ou définit le temps à attendre avant d'update avant de mettre à jour le binding | 1000 --1s |
ValidationRules | Règles qui vérifient la validité de la saisie de l'utilisateur | <object.ValidationRules></object.ValidationRules> |
... | ... | ... |
<TextBlock Text="{Binding Title}" />
<TextBlock Text="{Binding Array[1]}" />
<TextBlock Text="{Binding Path=Title,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type UserControl}}}"/>
Affiché plus de traces
<...xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase">
<TextBlock Text="{Binding Title, diag:PresentationTraceSources.TraceLevel=High}" />
<../>
Utilisation du vrai débogueur
<Window.Resources>
<local:DebugDummyConverter x:Key="DebugDummyConverter"/>
</Window.Resources>
<TextBlock Text="{Binding Title, ElementName=wnd, Converter={StaticResource DebugDummyConverter}}" />
namespace WpfTutorialSamples
{
public class DebugDummyConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Debugger.Break();
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Debugger.Break();
return value;
}
}
}
Permet de se lier directement à la source permet de se lier sur l'objet lui-même sans passer par le datacontexte.
Une StaticResource
sera résolue et attribuée à la propriété pendant le chargement du XAML, qui a lieu avant l'exécution de l'application. Elle ne sera affectée qu'une seule fois et toute modification du dictionnaire des ressources sera ignorée.
Une DynamicResource
attribue un objet Expression à la propriété pendant le chargement, mais ne consulte la ressource qu'au moment de l'exécution, lorsque la valeur est demandée à l'objet Expression. Cela reporte la recherche de la ressource jusqu'à ce qu'elle soit nécessaire au moment de l'exécution. Un bon exemple serait une référence directe à une ressource définie plus tard dans le XAML. Un autre exemple est une ressource qui n'existera même pas avant l'exécution. Elle mettra à jour la cible si le dictionnaire de la ressource source est modifié.
https://github.com/Alex141/CalcBinding Projet qui peut simplifier le binding.