DataGrid DataGridComboBoxColumn 在折叠后失去其价值
DataGrid DataGridComboBoxColumn lose its value after collapsing
我有一个 GridView
和 DataGridComboBoxColumn
,它第一次工作正常,但是当将列 visibility
设置为 collapsed
,然后 return 再次将 visibility
更改为 visible
,该列将失去其值。但是与之绑定的 属性 仍然具有正确的值。
刷新 DataContext 时,所有值都正确绑定。
我添加了一个测试转换器,并注意到在折叠列时触发了回调方法,并且值为空。
<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>
我可以重现你的问题。您可以通过处理 CellTemplate
中 ComboBox
的 Loaded
事件并重新设置 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
。然后,您想要将 ComboBox
的 SelectedItem
属性 绑定到数据对象的 Db
属性 以便能够显示 Name
属性 Db
对象在 CellTemplate
.
我有一个 GridView
和 DataGridComboBoxColumn
,它第一次工作正常,但是当将列 visibility
设置为 collapsed
,然后 return 再次将 visibility
更改为 visible
,该列将失去其值。但是与之绑定的 属性 仍然具有正确的值。
刷新 DataContext 时,所有值都正确绑定。
我添加了一个测试转换器,并注意到在折叠列时触发了回调方法,并且值为空。
<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>
我可以重现你的问题。您可以通过处理 CellTemplate
中 ComboBox
的 Loaded
事件并重新设置 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
。然后,您想要将 ComboBox
的 SelectedItem
属性 绑定到数据对象的 Db
属性 以便能够显示 Name
属性 Db
对象在 CellTemplate
.