Je travaille avec un DataGridView
(Windows Forms) avec MultiSelect activé qui est placé dans un contrôle utilisateur. Je voudrais mettre à jour toutes les lignes sélectionnées à partir de l'extérieur du contrôle de l'utilisateur en appelant une méthode publique qui met en œuvre le code suivant:Mise à jour de plusieurs objets INofityPropertyChange sélectionnés dans DataGridView
foreach(DataGridViewRow dr in dataGridView.SelectedRows)
{
MyBusiness business = (MyBusiness)dr.DataBoundItem;
business.Rating = 5;
}
Malheureusement, lorsque plusieurs lignes sont sélectionnées, une seule DataGridViewRow
est immédiatement rafraîchi, à savoir celle Ce dernier a été sélectionné. Les objets sous-jacents sont modifiés et l'événement NotifyPropertyChange est déclenché. De plus, quand je change la sélection après la mise à jour, je vois toutes les lignes mises à jour exactement comme je voudrais qu'elles soient immédiatement. Deuxième chose, très étrange: Lorsque je définis un point d'arrêt dans le Setter de la propriété Rating
où NotifyPropertyChange est déclenché et attendez quelques secondes avant de poursuivre l'exécution du code, tout fonctionne bien (toutes les lignes sont immédiatement mises à jour). Si je n'attends pas mais appuie sur F5 très rapidement chaque fois que le point d'arrêt est passé, j'obtiens l'effet décrit ci-dessus.
Mon objet métier ressemble à ceci (considérablement raccourci bien sûr):
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
}
Quelqu'un at-il déjà remarqué ce comportement aussi, ou connaît même une solution (ou une solution de contournement)?