PropertyChangedEventHandler INotifyPropertyChanged event ist immer null
Habe ich INotifyPropertyChanged implementiert, um die folgende Klasse
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));
}
}
}
Wenn das Symbol-Eigenschaft ändert, das Ereignis löst keine Probleme, aber das PropertyChanged-Ereignis ist immer null, wird diese Klasse instanziiert einmal nur, legte ich einen breakpoint auf den Konstruktor, um sicherzustellen, seine der Fall.
In einer anderen Klasse, das ist, wie ich ihn abonnieren:
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();
}
Aber die hf ist immer null als PropertyChanged null ist. Jede Idee, wie dies funktioniert?
Vielen Dank.
Was nicht funktioniert?
Dein code sieht OK aus, ich würde versuchen
Dein code sieht OK aus, ich würde versuchen
Data.Tables.FactoryItems.Symbol = "test";
direkt nach der +=
Linie. Mit einem Debugger aktiv.InformationsquelleAutor Maya | 2011-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist das Ereignis abonnieren, auf eine bestimmte Instanz.
Das wirkt sich nicht auf andere Instanzen.
Sehen die änderungen für alle Instanzen, die Sie verwenden können, ein statisches Ereignis.
Hüten Sie sich vor, dass jede Klasse, die abonniert die statische event bleiben in Erinnerung.
InformationsquelleAutor SLaks
Bis jemand abonniert das Ereignis, es bleibt
null
.InformationsquelleAutor SLaks
Gibt es verschiedene Typen, die sich dieser - vor allem Ding wie
DataGridView
(winforms, aber ähnlich wie in WPF, etc.), aber nur, wenn Daten-gebunden (setDataSource
), und nur wenn die Liste auch unterstützt die Bindung - zum BeispielBindingList<T>
.Testen, abonnieren Sie einfach, wenn Sie sich mit
PropertyChanged += ...
.Combobox
ItemsSource
. Ich vergaß die.ToList()
am Ende. Mir so lange gedauert hat u_uInformationsquelleAutor Marc Gravell
Sind Sie nur die Einstellung der
Symbol
Wert der Eigenschaft im code und debugging von dort? In dem Fall, kann nichts abonniert haben, diePropertyChanged
Veranstaltung.Wenn Sie das tun, XAML-Entwicklung ist, dann versuchen Sie die
DataContext
für ein XAML-element zu einer Instanz von IhrFactoryItems
geben, und dann binden dieSymbol
- Eigenschaft, um einText
Eigenschaft auf einer TextBox (zum Beispiel), und Sie finden die XAML-binding engine abonniert hat diePropertyChanged
Ereignis, so dass es nicht null sein.Alternativ einfach eine andere Art manuell abonnieren Sie Ihre
FactoryItems
PropertyChanged
Veranstaltung, Dinge zu testen im code.InformationsquelleAutor devdigital