2009-02-13 12 views
0

Je suis en train de m'enseigner WPF, et j'ai rencontré un petit problème auquel je ne trouve pas de réponse.WPF Lier DataTable aux contrôles utilisateur répétés

Mon application de test permet de déposer des fichiers image dans un StackPanel. Une fois qu'une image est supprimée, un nouveau contrôle utilisateur est ajouté à la pile et affiche des métadonnées sur le fichier. Tout fonctionne correctement et je peux parcourir les contrôles enfants pour récupérer les valeurs.

Ce que je préférerais pouvoir faire est de permettre à l'utilisateur de conserver ces données dans un fichier, afin qu'elles puissent interrompre le travail sur les données. La façon évidente pour moi de faire ceci est de stocker les données dans un DataTable et de les sérialiser/désérialiser en xml. Cependant, je ne sais pas comment conduire la collection de contrôles utilisateur à partir d'un objet DataTable ou DataSet - en fait, je ne sais même pas si c'est la bonne façon de procéder dans une application WPF. Je suis plus que disposé à admettre mon ignorance ici et à prendre de meilleures suggestions s'il y en a.

Résumé de la logique de l'application.

1) fichier est supprimé (à partir de l'explorateur Win) sur un StackPanel
2) File déclenche la création d'un nouveau contrôle de l'utilisateur, qui est ajouté aux données StackPanel
3) est rempli dans le contrôle de l'utilisateur
4 Le traitement des données implique l'itération à travers la collection de contrôle.

Ce que je voudrais

1) Le fichier est tombé (de l'explorateur Windows) sur un StackPanel
2) Les données du fichier est inséré dans un objet persistable (tableau de données?)
3) table de données mise à jour entraîne la génération du contrôle utilisateur à ajouter à la collection affichée.
4) la fonctionnalité de sauvegarde/chargement conserve les données pour une réutilisation ultérieure.

Merci à l'avance

Répondre

3

Vous êtes sur la bonne voie avec la deuxième approche, ce que vous devez regarder est ItemsControl - c'est une chose qui peut avoir des éléments ajoutés. C'est la base pour ListBox etc, et vous pouvez template it to work as you require. Il y a ensuite le DataTemplate qui gère les contrôles affichés et la liaison de données à ces contrôles lorsqu'un élément est ajouté à la structure de données sous-jacente. Il y a quelques exemples sur le net, essayez Dr WPF.

Pour que tout fonctionne, la structure de données sous-jacente doit prendre en charge la notification de modification. Comme tout se passe automagiquement, une fois que le Xaml est configuré, vous pouvez vous retrouver dans une situation étrange. Vous avez ajouté des données à une structure de données, ce qui a provoqué l'apparition de contrôles et de données dans votre ItemsControl. Comment liez-vous les éléments de données et leurs contrôles visuels. La réponse est d'utiliser certaines méthodes statiques intégrées ItemFromContainer qui relie le graphique à votre élément de données sous-jacent, utile pour gérer les événements de clic, et ContainerFromItem qui fait l'inverse.

Questions connexes