begin process at 2010 02 10 10:30:33
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Multimédia

 > 

WPF

 > 

INotifypropertychanged utilisation ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

INotifypropertychanged utilisation ?

lundi 11 mai 2009 à 22:51:23 | INotifypropertychanged utilisation ?

GillouXman

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 Form1_Load(object sender, EventArgs e)
        {
            lmovies = ds.GetMovies();
            dataGridView1.DataSource = lmovies;
        }

        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 ?

Merci d'avance



mardi 12 mai 2009 à 09:03:53 | Re : INotifypropertychanged utilisation ?

Bidou

Administrateur CodeS-SourceS
Réponse acceptée !
Salut,
Le GridView ne sera pas mis à jour!
Tu vois la modification si l'event paint est appelé, par exemple si tu passes le programme en dehors de l'écran, si une autre fenêtre passe par dessus, etc.
Prends l'exemple de MSDN: http://msdn.microsoft.com/fr-fr/library/system.componentmodel.inotifypropertychanged(VS.80).aspx

Presse sur le bouton => changement à l'écran.

Dans le code, remplace
public class DemoCustomer : INotifyPropertyChanged
par
public class DemoCustomer// : INotifyPropertyChanged

Presse sur le bouton => PAS de changement à l'écran.


Cette notion n'a rien avoir avec WPF (elle est apparue avec le framework 2.0 déjà) même si c'est vrai que WPF utilise ce concept abondamment...


-Blog-
-Site Perso-
mardi 12 mai 2009 à 09:50:41 | Re : INotifypropertychanged utilisation ?

GillouXman

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)
mardi 12 mai 2009 à 10:14:31 | Re : INotifypropertychanged utilisation ?

GillouXman

ok j'ai testé, le truc en plus qu'apparement il faut faire avec le gridview, si tu veux que ça fonctionne tu dois utiliser un object BindingSource comme datasource
mardi 12 mai 2009 à 10:17:37 | Re : INotifypropertychanged utilisation ?

GillouXman

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; dataGridView1.DataSource = bs;
mardi 12 mai 2009 à 10:19:03 | Re : INotifypropertychanged utilisation ?

GillouXman

Réponse acceptée !
sorry pour le code voici et avoir impléemté le INotifyPropertyChanged BindingSource bs = new BindingSource(); bs.DataSource = lmovies; dataGridView1.DataSource = bs;
dimanche 17 mai 2009 à 14:56:52 | Re : INotifypropertychanged utilisation ?

coq

Administrateur CodeS-SourceS
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.



/*
coq
MVP Visual C#
CoqBlog
*/


Cette discussion est classée dans : public, datasource, director, lmovies, inotifypropertychanged


Répondre à ce message

Sujets en rapport avec ce message

Pb avec mon programme - help... [ par adrien78 ] Voici les sources de mon programme il bug :// project created on 09/11/2002 at 10:51// By Adrien HADJ SALAH// http://www.informatick.com// Pour me rem Accès [ par fredza ] Bonjour et bonne année à toutes et tous,J'ai un fichier ip.cs voilà brièvement son contenu :namespace iprog{ /// /// Description résumée de ip. /// Conversion API Win32 -> C# [ par merlintintin ] J'aimerais utiliser des fonctions de l'APIen C#. Il faut pour cela redefinir les fonctions et les structures de l'API en C#. Malheureusement, je ne sa La référence d'objet n'est pas définie à une instance d'un objet. [ par kinderman81 ] Salut,Je souhaite ajouter des objets "Concessionnaire" dans un vecteur ArrayList (qui est la liste des concessionnaires): Celui-ci est l'objet Collect classe static dans classe static [ par linx20 ] Voila en gros je veux inclure une classe static ds mon autre classe static : public abstract class MaClasseStatic1{public static MaClasseStatic2 st2;/ TcpClient et TcpListener une est dérivée l'autre incluse dans une class [ par Trollien ] Bonjour,je commence à pété un cable car je ne comprend pas trop ce qui ce passe alors voici les deux sources et un bout de code de l'appli.Si qqn a un Creer et enregistrer une dll .net pour l'utiliser en ASP [ par Kev33 ] Bonjour,J'essai de creer une dll en .net et de l'enregistrer avec la commande "regsvr32 madll.dll"mais j'ai une erreur : "madll.dll a été chargé mais L'objet et moi [ par tobleronne ] Bonjour,J'ai fait une classe et j'arrive pas a y acceder dans une autre.Ma classe general.cs : ---------------------------public class general{public DataGrid et affichage d informations [ par fnadaus ] je me permet de vous demander encore un peu d aide sur les dataGrid avec des Winform:j récupère le DataSource du Datagrid depuis une requete SQL,mè je serialisation [ par zaka48 ] je voudrai serialiser un objet "etudiant" sous cette forme xxxxxx<DateDe


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,388 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales