【问题标题】:WPF Catch ObservableCollection's item property changesWPF Catch ObservableCollection 的项目属性更改
【发布时间】:2011-04-26 21:32:53
【问题描述】:

您好,我尝试了几种方法,但要么不成功,要么不理想。我只是想 捕获集合中任何项目的 PropertyChanged 事件。我现在已经手动连接了 但我想知道是否有更优雅的解决方案:

public class Item : INotifyPropertyChanged
{
    ...
    public delegate void MyPropertyChangedHandler(object sender, PropertyChangedEventArgs e);
    public event MyPropertyChangedHandler MyPropertyChanged;

    public event PropertyChangedEventHandler PropertyChanged = delegate { };
    private void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventArgs args = new PropertyChangedEventArgs(propertyName);
        PropertyChanged(this, args);
        if (MyPropertyChanged != null) MyPropertyChanged(this, args);
    }
    ...
}

public class ItemCollection : ObservableCollection<Item>
{
    ...
    public delegate void MyPropertyChangedHandler(object sender, PropertyChangedEventArgs e);
    public event MyPropertyChangedHandler MyPropertyChanged;

    protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
    {
        if (e.Action == NotifyCollectionChangedAction.Add)
        {
            foreach (Item item in e.NewItems)
            {
                item.MyPropertyChanged += new Item.MyPropertyChangedHandler(item_MyPropertyChanged);
            }
        }

        base.OnCollectionChanged(e);
    }

    void item_MyPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        MyPropertyChanged(sender, e);
    }
    ...
}

然后我可以轻松地附加到集合的 MyPropertyChanged 事件,它运行良好但更优雅?

提前致谢

【问题讨论】:

    标签: wpf events try-catch observablecollection propertychanged


    【解决方案1】:

    您几乎正在做您需要做的事情,AFIK 没有比这更好的方法了。

    有一件事,您可能希望添加代码以在从集合中删除项目时删除您的事件处理程序,成为一个好公民并避免内存泄漏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 2017-11-19
      • 2016-05-30
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多