J'ai un contrôle de grille de propriété qui a de nombreux éditeurs de cellules qui est automatiquement appliqué en utilisant un CellEditorTemplateSelector
. Chaque ligne de la grille de propriétés est liée à un PropertyItemViewModel simple.Comment lier un DataGridTemplateColumn à une valeur de colonne au lieu d'une valeur de ligne?
Maintenant, j'essaie de réutiliser tous ces éditeurs de cellules et de les présenter dans un DataGrid pour pouvoir comparer plusieurs valeurs d'objets côte à côte. J'ai donc ajouté un objet PropertiesRow
qui contient une liste de PropertyItemViewModel
(identique à la grille de propriétés ci-dessus).
Pour présenter chaque cellule, j'ai un modèle de données simple qui utilise le même sélecteur de modèle que la grille de propriétés.
<DataTemplate x:Key="CellDataTemplate">
<ContentControl
Content="{Binding Mode=OneWay}"
ContentTemplateSelector="{StaticResource CellEditorTemplateSelector}" />
</DataTemplate>
Cependant, pour que cela fonctionne, le modèle prévoit une PropertyItemViewModel
(pas le PropertiesRow), donc je dois nourrir en quelque sorte à travers une liaison qui récupère le bon de PropertiesRow.PropertyItems[columnIndex]
. Alors, quand j'ajouter les colonnes dans le code, j'ai essayé quelque chose comme ceci:
void AddColumns()
{
foreach (Property shownProperty in _ShownProperties)
{
_DataGrid.Columns.Add(new DataGridTemplateColumn()
{
Header = shownProperty.Name;
Binding = new Binding("PropertyItems[" + index + "]");
CellTemplate = (DataTemplate) FindResource("CellDataTemplate");
});
}
}
Cependant, DataGridTemplateColumn
n'a pas de propriété Binding! J'ai donc essayé de générer un DataTemplate intermédiaire pour chaque colonne, mais cela commence à être très complexe, et je pense qu'il doit y avoir une façon plus simple de le faire.
Des suggestions?