C# Winforms数据绑定与PropertyChanged事件排序问题

C# Winforms数据绑定与PropertyChanged事件排序问题,c#,winforms,events,data-binding,C#,Winforms,Events,Data Binding,如果以前有人问过这个问题,我很抱歉,但我确实尝试过挖掘大量可用的数据绑定问题,但找不到与我的问题相匹配的问题 我正在列表框索引和我的一个实体上的某个属性之间进行单向数据绑定,但在数据绑定发生后,我还需要运行一些额外的逻辑。我试着这样做: listBox.DataBindings.Add(“SelectedIndex”,entity,“Property”,true,DataSourceUpdateMode.OnPropertyChanged); listBox.SelectedIndexChang

如果以前有人问过这个问题,我很抱歉,但我确实尝试过挖掘大量可用的数据绑定问题,但找不到与我的问题相匹配的问题

我正在列表框索引和我的一个实体上的某个属性之间进行单向数据绑定,但在数据绑定发生后,我还需要运行一些额外的逻辑。我试着这样做:

listBox.DataBindings.Add(“SelectedIndex”,entity,“Property”,true,DataSourceUpdateMode.OnPropertyChanged);
listBox.SelectedIndexChanged+=(s,e)=>view.Refresh();
问题是,事件处理程序在数据绑定更新之前运行,但是
view.Refresh()
取决于正在更新的
entity.Property
的值。这会导致视图在下次更改索引之前不会刷新

有没有办法通过数据绑定来解决这个问题?目前,每当出现这种情况时,我都会求助于不使用数据绑定,而是手动执行:

listBox.SelectedIndex=entity.Property;
listBox.SelectedIndexChanged+=OnIndexChanged;
私有void OnIndexChanged(对象发送方,事件参数e)
{
entity.Property=listBox.SelectedIndex;
view.Refresh();
}
但我更愿意避免这种情况,因为我将数据绑定用于所有其他方面,并希望保持一致性


更新

我找到了解决办法。看起来绑定对象本身保存了BindingComplete事件,这非常适合于此。由于DataBindings.Add方法返回绑定对象,我可以将两者链接在一起。因此,我的代码变为:

listBox.DataBindings.Add(“SelectedIndex”,entity,“Property”,true,DataSourceUpdateMode.OnPropertyChanged)。BindingComplete+=(s,e)=>view.Refresh();

我现在唯一的问题是是否需要手动注销此事件,或者是否可以调用
listBox.DataBindings.Clear(),然后使用它。

您使用的方法返回一个实例。为什么不监听返回绑定的事件并从那里调用Refresh方法呢?代码可能需要评估字段,如和,以确保事件在数据源更改时触发。您不需要调用listBox.DataBindings.Clear()。释放控件时,绑定将被删除。您通常不需要手动注销事件,我认为在您的情况下,您不需要手动注销事件。

您是否尝试过
SelectedValueChanged
事件?它可能会在绑定后触发事件。我有,结果类似。我相信所有(*)更改的事件都会在绑定之前触发。您可以始终将事件放在数据源更改的事件上。如果您需要这方面的帮助,只需发布您的数据源代码。我已经对此运行了一些测试,但是只有在我第一次实际设置DataSourceChanged事件(
listBox.datasource=stringList
)时才调用它,而不是在数据绑定发生时。哦,我似乎找到了一种方法。谢谢,我也注意到了这一点。我已经更新了我的帖子,但我还有一个顾虑,我在最后补充说。