问题描述
我有一个UserControl,其中包含绑定到视图模型的DataGrid。有几列,包括两个DataGridComboBoxColumns。第一次渲染网格时,显示的所有数据都是完全正确的,并且ComboBox下拉列表包含可供选择的正确项目。一切都很好。
但是,只要我稍微滚动一下,以便将某些行从视图中滚动出来,然后又重新回到视图中,则组合框列中显示的数据就会消失。我在视图模型中实现了INotifyPropertyChanged,在调试之后,我确定没有什么会改变模型中的实际数据。我认为只有DataGridComboBox单元被弄乱了。为什么在关联的行首次出现在屏幕上时它们会正确显示,但是当该行滚动回视图时却显示为空白?
以下是您可能想知道的一些细节:
- UserControl的构造函数设置
DataContext = this
。 - DataGrid的ItemsSource绑定到UserControl的
Records
属性,该属性是ObservableCollection<viewmodel>
(其中viewmodel是我的视图模型的类型,natch)。我是从List<viewmodel>
构建的。 - 视图模型包含只读IDictionary属性(例如,一个名为
PossibleCustomerGroups
的属性),以便我可以像绑定所选值成员一样,在XAML中绑定组合框ItemSource属性。与其他名称空间或数据上下文融合。视图模型的所有实例都引用相同的字典,这些字典在创建时会从UserControl传递给它们,因此字典引用在UserControl的生命周期内不应更改。
牢记这一点,这是有问题的列之一的定义方式:
<DataGridComboBoxColumn Header="Customer Group"
SelectedValueBinding="{Binding CustomerGroupCode}"
displayMemberPath="Value"
SelectedValuePath="Key"
>
<DataGridComboBoxColumn.ElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource" Value="{Binding Path=PossibleCustomerGroups}" />
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource" Value="{Binding Path=PossibleCustomerGroups}" />
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
它绑定到视图模型的CustomerGroupCode
属性,该属性是一个整数,并且是PossibleCustomerGroupCodes
字典的键。
举一个简单的例子,使用虚构数据,观察我的行为:
- 当网格首次出现时,一切看起来正确,包括第1行,这表明销售员“ John Doe”与“航空航天客户”客户组相关联。
- 如果单击“客户组”单元格,则会出现“组合框”,然后可以将其下拉以查看公司的所有客户组。当我关闭下拉菜单而不进行任何更改时,组合框将保持不变,直到将焦点移到其他单元格上为止。
- 我向下滚动并向上滚动,以便John Doe消失然后重新出现。
- 这一次,该行显示了John Doe的姓名,但是“客户组”列通常为空白。视图模型的PropertyChanged事件尚未触发。空单元已死。单击组合框时不会出现。
- 对于滚动到视图和返回视图的任何行,这种情况都是随机发生的。当我继续滚动时,这种方式损坏了越来越多的行。
我做错了什么?还是可以提供有关调试此问题的任何线索?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)