Skip to content

Instantly share code, notes, and snippets.

@bizouarn
Last active November 13, 2024 22:00
Show Gist options
  • Save bizouarn/b6d4ad561ea959c77f46091bc9941d3a to your computer and use it in GitHub Desktop.
Save bizouarn/b6d4ad561ea959c77f46091bc9941d3a to your computer and use it in GitHub Desktop.
Notes pour le binding WPF

Binding WPF

Introduction

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)

Attributs possible :

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

Simple

<TextBlock Text="{Binding Title}" />
<TextBlock Text="{Binding Array[1]}" />

Avancé

<TextBlock Text="{Binding Path=Title,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type UserControl}}}"/>

Debug

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;
		}
	}
}

Notes

Quand utiliser BindsDirectlyToSource ?

Permet de se lier directement à la source permet de se lier sur l'objet lui-même sans passer par le datacontexte.

Différence entre StaticResource et DynamicResource dans WPF ?

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é.

Autres info utiles

https://github.com/Alex141/CalcBinding Projet qui peut simplifier le binding.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment