Привязка DataGrid в DataTemplate - PullRequest
       20

Привязка DataGrid в DataTemplate

0 голосов
/ 28 февраля 2012

В настоящее время я пытаюсь выполнить связывание внутри сетки данных, но у меня возникают проблемы при поднятии до уровня DataContext представления.

Вот код:

<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox SelectedItem="{Binding Operators}"
ItemsSource="{Binding DataContext.OperatorList,ElementName=FilterGrid}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

Есть идеи, что случилось? Viewmodel View связан в коде позади.

РЕДАКТИРОВАТЬ: Связывание, которое не работает, является связыванием ItemsSource, показанным выше

1 Ответ

3 голосов
/ 28 февраля 2012

Когда вы используете DataTemplate из DataGrid, вы не можете использовать привязки ElementName, так как они не будут обрабатываться должным образом из-за ограничений возможностей разрешения FindControl в иерархии элементов управления DataGrid. Вам необходимо использовать привязку RelativeSource, которая перемещается вверх по дереву элементов управления в поисках определенного типа элемента управления (, который необходимо определить - исходя из имени вашего элемента, я предположил, что это был DataGrid тип предка ).

 <DataGridTemplateColumn.CellEditingTemplate>
   <DataTemplate>
     <ComboBox 
        SelectedItem="{Binding Operators}" 
        ItemsSource="{Binding DataContext.OperatorList, 
                      RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
      />
   </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

См. это сообщение SO , в котором используется некоторый потенциально связанный пример кода, использующий MVVM для доступа к DataContext хоста UserControl для заполнения ComboBox ItemsSource.

...