Я использую Инструментарий WPF DataGrid и DataGridComboBoxColumn. Все работает хорошо, за исключением того, что, когда изменение выбора происходит на поле комбинированного списка, selectedvaluebinding источник сразу не обновляется. Это происходит только, когда поле комбинированного списка теряет фокус. Кто-либо столкнулся с этой проблемой и какими-либо решениями для предложений?
Вот xaml для столбца:
<toolkit:DataGridComboBoxColumn Header="Column" SelectedValueBinding="{Binding Path=Params.ColumnName, UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="cName"
SelectedValuePath="cName">
<toolkit:DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Info.Columns}" />
</Style>
</toolkit:DataGridComboBoxColumn.ElementStyle>
<toolkit:DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Info.Columns}" />
</Style>
</toolkit:DataGridComboBoxColumn.EditingElementStyle>
</toolkit:DataGridComboBoxColumn>
Проблема в том, что ячейка остается в режиме редактирования до тех пор, пока вы не покинете ячейку и изменения не будут зафиксированы
Решение: вам необходимо создать свой собственный тип столбца, чтобы переопределить поведение по умолчанию
код:
public class AutoCommitComboBoxColumn : Microsoft.Windows.Controls.DataGridComboBoxColumn
{
protected override FrameworkElement GenerateEditingElement(Microsoft.Windows.Controls.DataGridCell cell, object dataItem)
{
var comboBox = (ComboBox)base.GenerateEditingElement(cell, dataItem);
comboBox.SelectionChanged += ComboBox_SelectionChanged;
return comboBox;
}
public void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
CommitCellEdit((FrameworkElement)sender);
}
}