Я работаю с DataGridView
(Windows Forms) с включенным MultiSelect, который находится в пользовательском элементе управления. Я хотел бы обновить все выбранные строки вне пользовательского элемента управления, вызвав открытый метод, который реализует следующий код:
foreach(DataGridViewRow dr in dataGridView.SelectedRows)
{
MyBusiness business = (MyBusiness)dr.DataBoundItem;
business.Rating = 5;
}
К сожалению, при выборе нескольких строк немедленно обновляется только одна DataGridViewRow
, а именно та, которая была выбрана последней. Базовые объекты изменены, и событие NotifyPropertyChange запускается. Более того, когда я изменяю выделение после обновления, я вижу, что все строки обновляются в точности так, как я бы хотел, чтобы они были немедленно.
Второе, очень странное: когда я устанавливаю точку останова в Setter свойства Rating
, где запускается NotifyPropertyChange, и подожду там несколько секунд, прежде чем продолжить выполнение кода, все работает хорошо (все строки немедленно обновляются). Если я не жду, но нажимаю 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
}
Кто-нибудь уже заметил это поведение или даже знает решение (или обходной путь)?