Я хочу разрешить пользователю редактировать некоторые данные в 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>