我正在使用启用了 MultiSelect 的DataGridView
(Windows 窗体),它放置在用户控件中。我想通过调用实现以下代码的公共方法来更新用户控件外部的所有选定行:
foreach(DataGridViewRow dr in dataGridView.SelectedRows)
{
MyBusiness business = (MyBusiness)dr.DataBoundItem;
business.Rating = 5;
}
Unfortunately, when multiple rows are selected, only one DataGridViewRow
is immediately refreshed, namely the one that was last selected. 基础对象发生更改,并触发 NotifyPropertyChange 事件。此外,当我在更新后更改选择时,我会看到所有行都按照我希望它们立即更新的方式进行了更新。
第二件事,非常奇怪:当我在Rating
触发 NotifyPropertyChange 的 -property 的 Setter 中设置断点并在那里等待几秒钟,然后继续执行代码时,一切正常(所有行都立即更新)。如果我不等待而是在每次通过断点时非常快速地按 F5,我就会得到上面描述的效果。
我的业务对象看起来像这样(当然显着缩短):
public class MyBusiness : INotifyPropertyChanged
{
private int _rating;
public int Rating
{
get { return _rating; }
set
{
if(_rating != value)
{
_rating = value;
NotifyPropertyChanged("Rating");
}
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if(PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
是否有人也已经注意到这种行为,或者甚至知道解决方案(或解决方法)?