J'essaie de déclencher PropertyChangedEventHandler à partir d'un rappel CollectionChanged. Il est levé, mais il n'atteint pas l'abonné.C#: Abonnement à un événement déclenché à partir d'un autre événement
Peut-être que je ne peux pas traiter un EventHandler comme une variable? Bien que je l'aie fait sans problème par le passé, je l'évoque simplement dans un autre événement où je suis en difficulté.
Toute aide appréciée, merci.
using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
namespace Fire
{
/// <summary>
/// Simple class implementing INotifyPropertyChanged
/// I want to raise PropertyChanged whenever the ObservableCollection changes.
/// </summary>
public class Model : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
public ObservableCollection<int> Collection { get; set; }
public Model()
{
Collection = new ObservableCollection<int>();
// In theory it should be sorted out here:
Utils.RaisePropertyChangedWhenCollectionChanged(this, Collection, PropertyChanged, "Collection");
}
}
/// <summary>
/// I want to wrap the "If CollectionChanged then raise PropertyChanged" logic in a utility method".
/// </summary>
public class Utils
{
public static void RaisePropertyChangedWhenCollectionChanged(object owner, INotifyCollectionChanged collection, PropertyChangedEventHandler eventHandler, string propertyName)
{
collection.CollectionChanged += (object sender, NotifyCollectionChangedEventArgs e) =>
{
eventHandler(owner, new PropertyChangedEventArgs(propertyName));
};
}
}
class Program
{
static void Main(string[] args)
{
Model model = new Model();
model.PropertyChanged += model_PropertyChanged;
// But the problem is that PropertyChanged does not fire, even when the collection is changed.
model.Collection.Add(2);
}
static void model_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
// This does not get called!
Console.Out.WriteLine(String.Format("{0}", e.PropertyName));
}
}
}
Merci Jon! Cela semble si évident maintenant. – Nockm