WPF捕获ObservableCollection的item属性变化

标签 wpf events try-catch observablecollection propertychanged

嗨,我尝试了几种方法来做到这一点,但要么不成功,要么不理想。我只是想 捕获集合中任何项目的 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捕获ObservableCollection的item属性变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5796727/

相关文章:

c# - 如何在 C# WPF 应用程序中保存 accessToken

wpf - WPF 文本框的多行

c# - 为什么 COM 事件处理程序总是空的?

r - 在 Facebook 中使用 try Catch 或其他处理调用 API 错误

python - 使用 google DFP API python 客户端时出现奇怪的问题

WPF 工作目录

c# - WpfAnimatedGif 不要停留在特定的框架中

javascript - 在 $(document).ready() 触发器之前运行一个函数

java系统范围的键盘和鼠标状态

java - Java中try-catch中的注释代码