DataGrid DataGridComboBoxColumn在折叠后会失去其值



我有一个GridViewDataGridComboBoxColumn,第一次工作正常,但是当将列visibility设置为collapsed时,然后将visibility再次返回到visible,列会丢失其值。 但是绑定到它的属性仍然具有正确的值。

刷新数据上下文时,所有值都会正确绑定。

我添加了一个测试转换器,并注意到在折叠列时,会触发回调方法,并且值为 null。

<DataGridComboBoxColumn SelectedValueBinding="{Binding DbId}"
DisplayMemberPath="Name"
SelectedValuePath="Id"
Visibility="Visible">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding TestList}"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding TestList}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>

我可以重现您的问题。可以通过处理CellTemplateComboBoxLoaded事件并重新设置SelectedValue属性来解决此问题:

<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding TestList}"/>
<EventSetter Event="Loaded" Handler="OnLoaded" />
</Style>
</DataGridComboBoxColumn.ElementStyle>

private void OnLoaded(object sender, RoutedEventArgs e)
{
ComboBox cmb = sender as ComboBox;
dynamic dataObject = cmb.DataContext;
cmb.SelectedValue = dataObject.DbId;
}

另一种解决方案是将DataGridComboBoxColumn替换为DataGridTemplateColumn.然后,您希望将ComboBoxSelectedItem属性绑定到数据对象的Db属性,以便能够在CellTemplate中显示Db对象的Name属性。

最新更新