J'ai une collection d'objets stockés dans un CollectionViewSource
et liés à un DataGrid
. Je veux afficher une 'vue détaillée' de l'objet actuellement sélectionné dans le DataGrid
. Je peux obtenir l'objet actuel en utilisant CollectionViewSource.View.CurrentItem
.
MyClass
{
[IsImportant]
AProperty{}
AnotherProperty{}
[IsImportant]
YetAnotherProperty{}
}
Ce que je voudrais faire, c'est afficher un libellé (avec le nom de la propriété) et un contrôle (pour l'édition) dans une liste, pour chacune de ces propriétés marquées avec l'attribut IsImportant
. La liaison doit fonctionner entre les modifications apportées, le DataGrid et l'objet de sauvegarde. Le contrôle affiché doit varier en fonction du type de propriété, qui peut être soit boolean
, string
ou IEnumerable
(j'ai écrit un IValueConverter
pour convertir entre énumérable et chaîne séparée par des sauts de ligne).
Est-ce que quelqu'un sait comment accomplir cela ? Je peux actuellement afficher les valeurs de chaque propriété à travers le code suivant, mais les modifier ne mettrait pas à jour l'objet de sauvegarde :
listBox.ItemsSource = from p in typeof(MyClass).GetProperties()
where p.IsDefined(typeof(IsImportant), false)
select p.GetValue(_collectionViewSource.View.CurrentItem, null);
Pour clarifier, je voudrais que cela se fasse 'automagiquement', sans spécifier manuellement les noms de propriétés dans le XAML. Si je peux ajouter dynamiquement au XAML au moment de l'exécution en fonction des propriétés marquées d'attributs, cela serait également bien.