Как реализовать редактируемый столбец DataGridComboBoxColumn в WPF DataGrid

Я хочу разрешить пользователю редактировать некоторые данные в WPF DataGrid (из .net Framework 4.0). Столбец «инструменты» должен позволять пользователю выбрать доступный инструмент из статического списка или написать произвольный текст. Моя DataGrid привязана к данным с помощью MVVM. Я пробовал много решений, которые нашел в Интернете, но ни одно из них не работает правильно. Вот мой код:

<DataGrid Margin="0,6" ItemsSource="{Binding Path=Orders}" AutoGenerateColumns="False"  CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="True">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Instrument" MinWidth="140"                                      
 ItemsSource="{x:Static ViewModel.Instruments}" SelectedItemBinding="{Binding Path=SelectedInstrument}">
 <DataGridComboBoxColumn.EditingElementStyle>
   <Style TargetType="ComboBox">
     <Setter Property="IsEditable" Value="True"/>
   </Style>                  
 </DataGridComboBoxColumn.EditingElementStyle>                
</DataGridComboBoxColumn>   
</DataGrid.Columns>
</DataGrid>

Выпадающий список отображается правильно. Поле можно редактировать с помощью любого текста, но оно устанавливает значение NULL для SelectedInstrument после закрытия раскрывающегося списка для произвольного текста. Работает только для выбранного элемента. Я попытался перейти на SelectedValueBinding, но это не помогло.

Как правильно реализовать эти требования? Может кто-нибудь выложить сюда рабочий образец?

Дополнительно : Заказы - это ObservableCollection Порядок имеет свойство, такое как строка Title, DateTime Ordered, строка SelectedInstrument, Инструменты - это строка []

Решения : Следующее предложение в качестве обходного пути из Bathineni работает:

<DataGrid Margin="0,6" ItemsSource="{Binding Path=Orders}" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="True">
 <DataGrid.Columns>
  <DataGridTemplateColumn Header="Instrument" MinWidth="140">
   <DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
     <TextBlock Text="{Binding Path=SelectedInstrument, Mode=OneWay}"/>
    </DataTemplate>
   </DataGridTemplateColumn.CellTemplate>
   <DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
     <ComboBox IsEditable="True" Text="{Binding Path=SelectedInstrument}" 
      ItemsSource="{x:Static ViewModel.Instruments}"/>                   
    </DataTemplate>
   </DataGridTemplateColumn.CellEditingTemplate>
  </DataGridTemplateColumn>   
 </DataGrid.Columns>
</DataGrid>
18
задан Community 23 May 2017 в 12:18
поделиться