2010-11-04 5 views
0

Dans mon application, je veux créer une liaison pendant l'exécution, et chaque objet doit avoir une liaison séparée. Par exemple: J'ai deux copies d'un UserControl et chaque copie a la propriété Text et doit être liée à une source de données différente. Et comme la propriété de dépendance est statique, elle ne permettra pas d'avoir un DP par instance, un seul par classe. Donc, je me demande quelle est la meilleure approche pour y parvenir?Quelle est la meilleure approche pour créer une liaison lors de l'exécution?

+0

Sans vouloir vous offenser, je me demande comment vous allez devoir créer dynamiquement une liaison. –

+0

L'utilisateur lui-même doit créer des liaisons entre l'interface utilisateur et la source de données. Au cours de la création de l'application, je ne sais pas quel DP exact sera nécessaire et quel objet est lié à quelle source de données. Donc j'avais besoin de les créer dynamiquement. – Vitalij

Répondre

3

Pour travailler dynamiquement avec la liaison de données, consultez la classe statique BindingOperations.

En ce qui concerne l'utilisation de DP, je ne suis pas sûr de ce que vous demandez. Le DP lui-même est statique, mais la valeur d'un DP est associée par instance. Sinon, comment plusieurs instances de TextBox peuvent-elles avoir des valeurs de texte différentes? Les liaisons sont également spécifiques à chaque instance.

+0

Vous avez raison. Désolé, je voulais dire une chose légèrement différente. Je voulais dire comment créer des DP non existants et les assigner par instance d'un objet? – Vitalij

1

Les deux différentes sources de données sont-elles de types différents? Ou sont-ils deux instances différentes du même type?

Je demande parce que la solution que vous demandez - créer une liaison à l'exécution - peut être inutilement complexe. Normalement, vous n'avez pas besoin de créer les liaisons au moment de l'exécution pour résoudre le problème que vous avez décrit. D'après ce que vous avez dit jusqu'à présent au sujet du problème, il semble qu'une solution beaucoup plus simple devrait fonctionner.

Il est extrêmement fréquent d'avoir plusieurs instances d'un contrôle utilisateur particulier, et que chaque instance soit liée à un objet source différent. Vous pouvez le faire avec des expressions de liaison de données normales dans Xaml. L'astuce consiste à s'appuyer sur le DataContext pour déterminer quel contrôle utilisateur particulier utilise comme source. Par exemple:

<my:MyUserControl DataContext="{Binding Path=Source1}" /> 
<my:MyUserControl DataContext="{Binding Path=Source2}" /> 

Cela va créer deux instances d'un contrôle utilisateur personnalisé, MyUserControl, et toutes les liaisons dans le premier attacheront à tout objet était Source1, tandis que le second utilisera Source2. Donc, si MyUserControl.xaml contient quelque chose comme ceci:

<TextBlock Text="{Binding Path=Name}" /> 

alors qui va se lier à la propriété Nom de deux objets de différentes sources dans les deux instances de contrôle utilisateur différents.

Cela répond à votre exigence stipulée que chaque contrôle utilisateur "doit être lié à une source de données différente".

+0

Dans mon cas, l'utilisateur spécifie le chemin de liaison, en utilisant l'interface de glisser-déposer, puis je récupère par programmation la liaison et réaffecter à un contrôle utilisateur. – Vitalij

Questions connexes