Quiero que el usuario pueda editar algunos datos en WPF DataGrid (de .NET Framework 4.0). La columna "instrumentos" debe permitir al usuario seleccionar un instrumento disponible de una lista estática o escribir un texto libre. Mi DataGrid está enlazado a datos usando MVVM. He intentado muchas soluciones que he encontrado en Internet, pero ninguna de ellas funciona correctamente. Aquí está mi código:Cómo implementar DataGridComboBoxColumn editable en WPF DataGrid
<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>
se muestra correctamente el-down-lista desplegable. El campo se puede editar con cualquier texto, pero establece un valor nulo para SelectedInstrument después de que se cierre el menú desplegable para el texto libre. Funciona solo para el elemento seleccionado. Intenté cambiar a SelectedValueBinding, pero no ayuda.
¿Cómo implementar estos requisitos correctamente? ¿Alguien puede publicar aquí una muestra de trabajo?
adicional: pedidos es ObservableCollection Orden tiene la propiedad como el título de cuerdas, DateTime Ordenado, SelectedInstrument cadena, Instruments es una cadena []
Soluciones: Siguiendo sugieren como una solución de bathineni obras :
<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>
Creo que en su solución debe reemplazar '
Neil
DataGridTemplateColumn' sí, esto es errata –