GillouXman
Messages postés561Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention10 juin 2010
-
11 mai 2009 à 22:51
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
17 mai 2009 à 14:56
Salut tout le monde, j'ai une petite question qui me turlupine.
Depuis WPF/Silverlight on parle bcp de binding et tout ca blablabla... et notamment de INotifypropertychanged qui permettraient de signaler à un composant que sa source a changé et de se mettre à jour (jusque là j'ai compris?)
ce que je ne comprends pas bien c'est que ce type de comportoment, on pouvait déja l'avoir sans avoir recours à INotifypropertychanged
voici un code qui explique mes dire
mon object Movie et une mini BLL qui est ma datasource
public class Movie
{
public string Title { get; set; }
public string Director { get; set; }
}
public class DataSource
{
public List<Movie> GetMovies()
{
List<Movie> movies = new List<Movie>();
movies.Add(new Movie { Director "ioioioo", Title "Matrix" });
movies.Add(new Movie { Director "Jean", Title "Matrix 2" });
return movies;
}
}
le code ma form
public partial class Form1 : Form
{
DataSource ds = new DataSource();
List<Movie> lmovies;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
lmovies[0].Director = "MEEEEEEEEEEEEEe";
}
}
le simple fait de mettre Meeeeeeeeee dabs lmovies[0].Director, change ioioioo par MEeeeeee égalemenent dans l'interface. DOnc what's the point?
Qqc m'échappe ? ou c'est simplement un comportement lié au gridview dans ce cas ci ?
GillouXman
Messages postés561Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention10 juin 2010 12 mai 2009 à 09:50
non mais je sais que ça n'a rien avoir avec WPF, c'est juste revenu au devant de la piste ac les news technos que sont WPF et Silverlight.
par contre tu as raison que c'est seulement quand je clique sur le grid que c'est refresh.
donc selon toi, si j'implémente le INotifyPropertyChanged, ça devrait refresh sans devoir cliquer sur le grid par exemple) ? (donc sans devoir appeler le paint)
GillouXman
Messages postés561Date d'inscriptionmardi 4 mars 2008StatutMembreDernière intervention10 juin 2010 12 mai 2009 à 10:17
donc au final si on veut le propertychanged sur la propriété director
public class Movie:INotifyPropertyChanged
{
public string Title { get; set; }
private string _dir;
public string Director
{
get
{
return _dir;
}
set
{
_dir = value;
NotifyPropertyChanged("Director");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
#endregion
}
le bind du grid
lmovies = ds.GetMovies();
BindingSource bs = new BindingSource();
bs.DataSource = lmovies;
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 17 mai 2009 à 14:56
Salut,
De mémoire utiliser en DataSource une BindingList<T> ou lieu d'une List<T> permet aussi d'avoir le comportement correct sur le GridView, sans passer par BindingSource.