首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在GridControl更新后清除ItemsSource聚焦的行

在GridControl更新后清除ItemsSource聚焦的行
EN

Stack Overflow用户
提问于 2021-08-09 13:52:07
回答 1查看 198关注 0票数 0

我正在研究遗留代码,我偶然发现了一个问题,它让我陷入了一个星期的困境。我想听听别人对此的看法。

这种情况包括父-子项:当选择父节点时,绑定到BindingList<Child> childrendevexpress.xpf.Grid将使用相应的数据填充。例如,在网格中选择/突出显示一行。当选择另一个父节点时,将清除children列表,添加新项并在网格中成功显示它们。

实际行为:先前选定的行将保持选中。

期望行为:在更新内容时清除选择。

关注点1: ItemsSourceChanged将在第一次加载时触发一次,但并不是每次更新都会触发。我相信这是因为条目源本身并没有改变,对象引用仍然是相同的,但是内容是更新的,没有我可以找到的ItemsSourceUpdated。而且,TargetUpdated在第一次加载时也只触发一次,尽管NotifyOnTargetUpdated设置为true,Child实现了INotifyPropertyChanged

关注点2:更新子列表时,ListChangedEvent被抑制,以避免为每个添加的项触发。RaiseListChangedEvents设置为false,发生一些业务逻辑,然后将RaiseListChangedEvents设置为true,然后将ResetBindings()设置为触发事件。当此抑制被移除时,所选内容将按需要被清除。我想有什么东西被禁用了,但又没有启用?!

关注点3:对于第一个加载到空表视图的子视图,默认情况下选择第一行。这可以通过在XAML中将AllowInitiallyFocusedRow设置为false来停止。在研究这个问题时,我发现KeepFocusedRowOnUpdate可以设置为false,以达到预期的行为。然而,KeepFocusedRowOnUpdate对于正在使用的GridControl是不可用的,我也找不到任何类似的。让我印象深刻的是,Devexpress支持中心上有许多线程用于实现相反的目标,人们希望保留/保留/保留先前的选择。这使得我的搜索更加困难。

关注点4: VM不显式地将ReadOnlyCollection<Child> SelectedChildren绑定到视图,但是使用的是ReadOnlyCollection<Child> SelectedChildren微,所以我认为很多命名约定都在起作用。我怀疑只读是防止选择被清除,但是当删除point2中提到的抑制时,选择确实会被清除。除非这是这两个人之间非常具体的案件组合?!

任何想法、建议或类似的经历都会受到赞赏。

PS:涉及的代码很多,所以我不知道在这里添加哪些代码是有用的。如果你认为有什么特别的地方需要补充,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-10 12:12:24

在这种情况下,一些源代码将是有用的。在任何情况下,要在GridControl上调试聚焦问题,都应该检查以下属性:

GridControl

代码语言:javascript
运行
复制
  ItemsSource="{Binding GridItemSource}"
  SelectedItems="{Binding SelectedGridItems}"
  SelectionMode="Row"

TableView

代码语言:javascript
运行
复制
FocusedRow="{Binding FocusedRow, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"

检查它们是否以某种方式捆绑在一起。还请检查VM上是否有一些DXEvent绑定,如SelectionChanged

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68713259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档