在任何布局控件的Children上获取CollectionChanged事件?

Amo*_*var 1 c# wpf layout children

如何从任何LayoutControl的Children中获取ItemAdded,ItemRemoved通知?

假设我们有Grid控制权.如果我TextBlock在Grid中添加新控件,那么它应该通过添加的项目通知我.如果删除,那么它应该通知我已经从中移除的项目Children's (UIElementCollection),例如ObservableCollection.

这有可能吗?

小智 6

不知道你为什么要这样做,但我想你可以扩展Grid面板并覆盖OnVisualChildrenChanged protected方法来引发一个事件:

public class ObservableGrid : Grid
{
    protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
    {
        base.OnVisualChildrenChanged(visualAdded, visualRemoved);

        if (VisualChildrenChanged != null)
            VisualChildrenChanged(this, new VisualChildrenChangedEventArgs(visualAdded, visualRemoved));
    }

    public event EventHandler<VisualChildrenChangedEventArgs> VisualChildrenChanged;
}

public class VisualChildrenChangedEventArgs : EventArgs
{
    public VisualChildrenChangedEventArgs(DependencyObject visualAdded, DependencyObject visualRemoved)
    {
        VisualAdded = visualAdded;
        VisualRemoved = visualRemoved;
    }

    public DependencyObject VisualAdded { get; private set; }
    public DependencyObject VisualRemoved { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)