C# DataGrid DataGridComboxColumn在折叠后丢失其值
我有一个C# DataGrid DataGridComboxColumn在折叠后丢失其值,c#,wpf,xaml,datagrid,datagridcomboboxcolumn,C#,Wpf,Xaml,Datagrid,Datagridcomboboxcolumn,我有一个GridView,其中包含datagridcomboxcolumn,它第一次工作正常,但是当将列visibility设置为collapsed,然后再次将visibility返回到visible时,该列将丢失其值。但与之有界的属性仍然具有正确的值 刷新DataContext时,所有值都被正确绑定 我添加了一个测试转换器,并注意到当折叠列时,会触发回调方法,并且值为null <DataGridComboBoxColumn SelectedValueBinding="{Binding D
GridView
,其中包含datagridcomboxcolumn
,它第一次工作正常,但是当将列visibility
设置为collapsed
,然后再次将visibility
返回到visible
时,该列将丢失其值。但与之有界的属性仍然具有正确的值
刷新DataContext时,所有值都被正确绑定
我添加了一个测试转换器,并注意到当折叠列时,会触发回调方法,并且值为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>
另一个解决方案是将
datagridcomboxcolumn
替换为DataGridTemplateColumn
。然后,您希望将组合框的SelectedItem
属性绑定到数据对象的Db
属性,以便能够在单元格模板中显示Db
对象的名称属性,您需要实现INotifyPropertyChanged on TestList,以便UI反映更改已经实现并且工作正常,更新datacontext可以正确更新所有值。您可以发布更多代码详细信息吗?转换器我的意思是转换器没有任何逻辑,它只是检查值。折叠列时,将调用convert back方法,值为null。返回与convert方法中返回的可见性相同的可见性。加载时,我刚刚调用DataContext并引发OnPropertyChanged,它工作正常。谢谢
private void OnLoaded(object sender, RoutedEventArgs e)
{
ComboBox cmb = sender as ComboBox;
dynamic dataObject = cmb.DataContext;
cmb.SelectedValue = dataObject.DbId;
}