gpt4 book ai didi

WPF DataGrid 最佳实践?

转载 作者:行者123 更新时间:2023-12-03 10:41:05 26 4
gpt4 key购买 nike

我正在开发一个使用 DataGrid 的基于 MVVM 的 WPF 应用程序。 .网格数据绑定(bind)到 ObservableCollection<Widget> (Widget 列表)。用户需要能够插入 Widget进入当前选中的Widget下面的列表, 删除选定的 Widget , 并重新排序 Widget s 在网格上。我将通过拖放实现重新排序。

在深入研究之前,我想对我的方法进行一次现实检查。这是我打算做的:Widget类将有 Index将用于订购 Widget 的属性列表。添加、删除和重新排序将通过操作此 Index 属性完成,排序将在 Widget 上完成。列表,而不是通过 CollectionView .

DataContext 之前设置,Widget列表将按 Index 排序属性(property)。当用户添加 Widget , Index对于每个 Widget,属性将增加 1在网格上选定的项目下方,以及新的 Widget将给出重新编号打开的索引号。 Widget list 将使用,并且绑定(bind)将被刷新。

当用户删除 Widget , Widget将从列表中删除,Index已删除项目下方网格中项目的属性将减 1。Widget list 将被使用,并且绑定(bind)刷新,如上。重新排序将作为删除和插入的组合完成。

这是我的问题:这是实现插入、删除和重新排序的合理策略吗?有没有更好的方法来解决它?关于这个主题的任何好的文章或博客文章?我看过,但我没有提出任何关于点的东西。

谢谢你的帮助。

最佳答案

我已经弄清楚了这个问题。我确实需要 Index 属性,但不需要对 ObservableCollection 进行排序。我创建了一个接口(interface) IIndexedObject,它具有一个属性 Index。我在任何需要索引的对象上实现该接口(interface),并在我的数据库表中添加一个索引列。

当我加载到我的对象模型中时,我在 Index 属性上对数据库表进行排序。这可确保列表以与上次运行相同的顺序加载。我使用 DataGrid 底部提供的空白行添加对象。它给它们的索引为 0。我使用绑定(bind)到 View 模型中的 ICommand 的 Delete 按钮删除对象。

我的 View 模型订阅了任何包含 IIndexedObjects 的 ObservableCollection 的 CollectionChanged 属性。当事件触发时, View 模型将集合传递给 ReIndexCollection 服务方法,该方法采用 IIndexedObject。该方法通过简单地迭代集合,为每个元素的 Index 属性分配一个增量整数值,根据其当前顺序重新索引集合。当我将集合持久化回数据库时,索引值被保存,以确保在下次运行时以相同的顺序加载集合。

由于唯一需要的排序是在数据库加载时完成的,因此不需要对 ObservableCollection 进行排序。当我在 DataGrid 上移动项目时,它会在那时负责重新排序集合。我所要做的就是重新索引集合,以便将其顺序保留回数据库。

总而言之,这比我预期的要容易得多。我喜欢 WPF 和 MVVM 的原因之一。

关于WPF DataGrid 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1441529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com