【发布时间】:2011-08-31 14:20:28
【问题描述】:
我需要知道何时打算在集合中添加/删除/修改项目。
我尝试在将触发这些事件的类中继承 BindingList,但是“添加”事件不起作用。我发现它工作的唯一方法是重写 EndNew() 方法,但是我没有找到一种方法来获取要在此方法中添加哪个对象 (如果有人对此有解决方案,也可以!).
因此构建了一个全新的类,它继承自 BindingList 的相同接口/类并实现了所有内容(但我没有继承 ICancelAddNew)。
我通过数据绑定将它绑定到我的列表框,但我发现没有任何效果(listchanged 事件和 listchanged 事件)。如何在列表框上模拟 BindingList 行为?
非常感谢任何建议,我没有其他解决方法的想法
编辑 1:
这是我的收藏:http://pastie.org/1978601 这就是我将集合绑定到 ListBox 的方式
SpellCasterManager.CurrentProfile.ButtonsMacro.ListChanged += new ListChangedEventHandler(ButtonsMacro_ListChanged);
SpellCasterManager.CurrentProfile.ButtonsMacro.ListChanging += new Expand.ComponentModel.ListChangingEventHandler(ButtonsMacro_ListChanging);
gumpButton.DataBindings.Add("Value", SpellCasterManager.CurrentProfile.ButtonsMacro, "GumpIndex", false, DataSourceUpdateMode.OnPropertyChanged);
实际上在订阅事件下只有一个 MessageBox.Show("bla");
【问题讨论】:
-
也许您应该发布更多关于“为什么”您想知道何时添加/删除/修改项目?因为如果您想在此之前阻止某些 UI 操作,那么您可以设置某种事件或绑定以在某些活动正在处理时禁用添加/删除/修改操作。
-
我想做的是将每个属性的“先前值”存储在一个列表中,更改为一个 BindingList 项,因为我想将它用于类似于 Ctrl + Z 的东西跨度>
-
因此,简单地说,您希望应用程序具有撤消/重做功能吗?然后您可能需要更改许多内容,因为属性和集合中的每个更改都需要存储为可以应用或删除的工作单元。有一些 codeplex 项目提供了一些框架来实现 Undo/Redo。
-
好吧,我不会使用 Memento 方法,但我想使用 Command 方法,这就是为什么我更喜欢检测变化而不是变化的事件
标签: c# data-binding listbox bindinglist