INotifyPropertyChanged PropertyChangedEventHandler événement est toujours null
J'ai mis en œuvre INotifyPropertyChanged une classe à la suivante
public class FactoryItems : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
string symbol;
public string Symbol
{
get { return symbol; }
set { symbol = value; OnPropertyChanged("Symbol"); }
}
public FactoryItems()
{
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
Lorsque le Symbole des changements de propriété de l'événement est déclenché avec pas de problèmes, mais l'événement PropertyChanged est toujours nulle, cette classe est instanciée qu'une seule fois, j'ai mis un point d'arrêt sur le constructeur pour s'assurer de son le cas.
Dans une autre classe, c'est la façon dont je m'y abonner:
Data.Tables.FactoryItems = new Data.FactoryItems();
Data.Tables.FactoryItems.PropertyChanged +=
new System.ComponentModel.PropertyChangedEventHandler(FactoryItems_SymbolChanged);
void FactoryItems_SymbolChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
doSomething();
}
Mais le maître est toujours la valeur null comme PropertyChanged est null. Une idée de comment le faire fonctionner?
Merci beaucoup.
Ce n'est pas de travail?
Votre code a l'air correct, je voudrais essayer de
Votre code a l'air correct, je voudrais essayer de
Data.Tables.FactoryItems.Symbol = "test";
à droite après le +=
ligne. Avec un Débogueur active.OriginalL'auteur Maya | 2011-02-20
Vous devez vous connecter pour publier un commentaire.
Vous êtes vous abonner à l'événement sur un exemple particulier.
Qui n'affecte pas les autres instances.
À voir des changements dans tous les cas, vous pouvez utiliser un événement statique.
Méfiez-vous que toute la classe qui s'abonne à la statique de l'événement restera dans la mémoire pour toujours.
OriginalL'auteur SLaks
Jusqu'à ce que quelqu'un s'abonne à l'évènement, il restera
null
.OriginalL'auteur SLaks
Il existe différents types de souscrire à cette, surtout la chose comme
DataGridView
(winforms, mais semblable en WPF, etc), mais seulement lors de la liaison de données (setDataSource
), et seulement si la liste aussi prend en charge la liaison par exempleBindingList<T>
.Pour tester, il suffit de vous abonner si vous-même avec
PropertyChanged += ...
.Combobox
ItemsSource
. J'ai oublié le.ToList()
sur la fin. M'a fallu si longtemps u_uOriginalL'auteur Marc Gravell
Sont que vous venez de réglage de la
Symbol
la valeur de la propriété dans le code de débogage et à partir de là? Dans ce cas, rien ne peut avoir souscrit à l'PropertyChanged
événement.Si vous faites XAML développement, alors essayez de définir le
DataContext
pour un élément XAML à être une instance de votreFactoryItems
type, puis lier lesSymbol
propriété à unText
de propriété sur une zone de texte (par exemple), et vous trouverez le code XAML de la liaison moteur a souscrit à laPropertyChanged
de l'événement, il n'est pas null.Sinon, juste avoir un autre type manuellement s'abonner à votre
FactoryItems
PropertyChanged
événement pour tester des choses dans le code.OriginalL'auteur devdigital