2015-06-17 2 views
2

Обсуждаются основы привязки списка объектов к DataGrid How do I bind a List<CustomObject> to a WPF DataGrid?.Bind customObject to DataGrid

Моя установка немного сложнее: У меня есть RowModels, которые содержат метаданные для строки, а также список CellModels. снова содержат некоторые метаданные и свойство Value, которое показано в dataGrid.

Чтобы заполнить мой DataGrid я установить

ItemsSource="{Binding RowModelList, UpdateSourceTrigger= PropertyChanged}" 

и отображаются столбцы один за другим через

<DataGridTextColumn Binding="{Binding CellModelList[0].Value, UpdateSourceTrigger= PropertyChanged}"/> 
<DataGridTextColumn Binding="{Binding CellModelList[1].Value, UpdateSourceTrigger= PropertyChanged}"/> 
... 

Таким образом, я мог бы также указать ColumnHeader для каждого столбца и изменить представление каждого столбца.

Однако я хотел был бы использовать DataTrigger в моем DataGridCell -Style для доступа к метаданным моих CellModels.

это работает, но .. хорошо:

Конечно, я мог бы создать стиль для каждого столбца, как

<Style x:Key="CellStyleColumnZero" TargetType="DataGridCell"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding CellModelList[0].Enabled}" Value="False"> 
      <Setter Property="IsEnabled" Value="False"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

Вопрос:

Мне нужно установить свойство DataGridCell в зависимости от метаданных в моем CellModel.

Я уверен, что есть более элегантное решение (чем показано выше), которое не требует настройки каждой отдельной колонки. Мне все же нужно иметь возможность вручную менять отдельные столбцы (особенно ColumnHeaders), поэтому я вручную объявлял DataGridTextColumns в один ряд.

Есть ли у вас какие-либо предложения, как правильно подойти?

+0

Использование C# Отражение этого элегантное решение. Он может перечислить вам метаданные 'CellModel' –

+0

Я думаю, вы неправильно поняли вопрос. По метаданным я имел в виду свойства (такие как Enabled, Value и т. Д.) Внутри 'CellModel'. Проблема в том, что в текущем решении «CellModel» не привязан к DataGridCell (существует только свойство «Value»). Таким образом, я не могу получить доступ к 'CellModel' через привязку данных изнутри' DataGridCell'-Style. –

+0

Почему вы не можете просто присвоить значение CellModel? –

ответ

0

Это ответ на вопрос о последующей обработке.

Решение, которое я использовал, создало прикрепленное свойство для DataGridCell, в котором я храню CellModel и получаю доступ к свойствам оттуда.

См связанный вопрос для кода: Structure of WPF DataGrid - change cells depending on value