Я хочу, чтобы пользователь мог редактировать некоторые данные в 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 Заказ имеет свойство как строка Заголовок, 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>