我有一个GridView
DataGridComboBoxColumn
,第一次工作正常,但是当将列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>
我可以重现您的问题。可以通过处理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
属性,以便能够在CellTemplate
中显示Db
对象的Name
属性。