привязка комбокса в wpf datagrid - PullRequest
0 голосов
/ 05 августа 2010

У меня есть список, который я заполняю в начале моей модели представления:

ListOfEmployees = new List<EmployeeBO>(employeeRepository.GetEmployees(true, true));

Я пытаюсь получить комбинированный список в сетке данных для заполнения из этого списка.

<DataGridTemplateColumn Header="U/M" MinWidth="145">
 <DataGridTemplateColumn.CellEditingTemplate>
  <DataTemplate>
   <ComboBox Name="cboUnitMeasure" 
     ItemsSource="{Binding Path=ListOfUnitMeasures}"
     DisplayMemberPath="UnitMeasureDescription" SelectedValuePath="UnitMeasureValue" 
     SelectedValue="{Binding UnitMeasureValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     HorizontalAlignment="Left" Width="140" />
  </DataTemplate>
 </DataGridTemplateColumn.CellEditingTemplate>
 <DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
   <TextBlock Text="{Binding UnitMeasureDescription}" />
  </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Когда dg загружается, шаблон ячейки отображает значение UnitMeasureDescription, но когда я нажимаю на ячейку для редактирования, в выпадающем списке нет элементов.С другой стороны, когда я использую статический ресурс из XML-файла в качестве источника элементов - используя те же имена свойств - комбинированный список содержит элементы:

<DataGridTemplateColumn Header="U/M" MinWidth="145">
 <DataGridTemplateColumn.CellEditingTemplate>
  <DataTemplate>
   <ComboBox Name="cboUnitMeasure" 
     ItemsSource="{Binding Source={StaticResource UnitMeasureData}}"
     DisplayMemberPath="UnitMeasureDescription" SelectedValuePath="UnitMeasureValue" 
     SelectedValue="{Binding UnitMeasureValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     HorizontalAlignment="Left" Width="140" />
  </DataTemplate>
 </DataGridTemplateColumn.CellEditingTemplate>
 <DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
   <TextBlock Text="{Binding UnitMeasureDescription}" />
  </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Я ставлю точку останова сразу после заполнения ListOfEmployeesВ.М. и содержит элементы.Я также проверил правильность имен свойств в DisplayMemberPath и SelectedValuePath.Не уверен, что я здесь делаю не так.

1 Ответ

3 голосов
/ 05 августа 2010

Является ли «ListOfUnitMeasures» свойством виртуальной машины или свойством EmployeeBO?Хорошо, если предположить, что для DataSrid ItemsSource установлено значение List<EmployeeBO> и что на виртуальной машине есть другой список с именем «ListUnitOfMeasures», вот мое объяснение:

DataContext каждой строки в DataGrid будет равенэлементы в DataSrid ItemsSource.В вашем случае каждая строка будет использовать EmployeeBO в качестве своего DataContext.А поскольку «ListOfUnitMeasures» не является свойством Employee BO, привязка к ComboBox не будет работать и, следовательно, не будет ничего отображать.

Одним из возможных решений является изменение привязки на ComboBox для использованияRelativeSource указывает обратно на родительский DataGrid следующим образом:

<ComboBox Name="cboUnitMeasure" 
     ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=DataContext.ListOfUnitMeasures}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...