У меня есть элемент управления сеткой свойств, в котором есть много редакторов ячеек, которые автоматически применяются с помощью CellEditorTemplateSelector
.Каждая строка сетки свойств связана с простым PropertyItemViewModel.
Теперь я пытаюсь повторно использовать все эти редакторы ячеек и представить их в DataGrid, чтобы иметь возможность сравнивать несколько значений объекта бок о бок.Поэтому я добавил объект PropertiesRow
, который содержит список PropertyItemViewModel
(такой же, как в приведенной выше таблице свойств).
Чтобы представить каждую ячейку, у меня есть простой шаблон данных, который использует тот же селектор шаблона, что иСетка свойств.
<DataTemplate x:Key="CellDataTemplate">
<ContentControl
Content="{Binding Mode=OneWay}"
ContentTemplateSelector="{StaticResource CellEditorTemplateSelector}" />
</DataTemplate>
Однако, чтобы это работало, шаблон ожидает PropertyItemViewModel
(не PropertiesRow), поэтому мне нужно каким-то образом передать его через привязку, которая выбирает правильную из PropertiesRow.PropertyItems[columnIndex]
.Поэтому, когда я добавляю столбцы через код, я пробовал что-то вроде этого:
void AddColumns()
{
foreach (Property shownProperty in _ShownProperties)
{
_DataGrid.Columns.Add(new DataGridTemplateColumn()
{
Header = shownProperty.Name;
Binding = new Binding("PropertyItems[" + index + "]");
CellTemplate = (DataTemplate) FindResource("CellDataTemplate");
});
}
}
Однако DataGridTemplateColumn
не имеет свойства Binding!Поэтому я попытался создать промежуточный DataTemplate для каждого столбца, но это становится очень сложным, и я чувствую, что должен быть более простой способ сделать это.
Есть предложения?