wpf ObservableCollection元素的自动 Package

gdrx4gfi  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(138)

如标题所述,我正在尝试实现ObservableCollection项的自动 Package ,目前我正在使用CollectionChanged事件来实现,在该事件中,我检查元素是否为必需类型,如果不是,则创建此类型的对象(它也是一个容器),将元素移动到它,并尝试通过 Package 器替换集合中的当前元素,但是在这里我得到了运行时错误,在CollectionChanged事件期间无法修改ObservableCollection,所以,我的问题是,如何实现自动 Package ?这里是示例代码:

[ContentProperty("Items")]
public partial class BaseUserControl : UserControl
{
    public static readonly DependencyProperty ItemsProperty = DependencyProperty.Register("Items",
        typeof(ObservableCollection<FrameworkElement>), typeof(BaseUserControl));
    public ObservableCollection<FrameworkElement> Items
    {
        get { return (ObservableCollection<FrameworkElement>)GetValue(ItemsProperty); }
        set { SetValue(ItemsProperty, value); }
    }

    public BaseUserControl()
    {
        InitializeComponent();

        Items.CollectionChanged += Items_CollectionChanged;
    }

    private void Items_CollectionChanged(object? sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        for (int i = 0; i <  Items.Count; i++)
        {
            if (Items[i] is not WrapperUserControl)
            {
                WrapperUserControl wrapper = new WrapperUserControl();
                wrapper.Items.Add(Items[i]);
                Items[i] = wrapper;
                return;
            }
        }

        // do something else
    }
}

字符串

bis0qfac

bis0qfac1#

在CollectionChanged事件期间,我收到无法修改ObservableCollection运行时错误
此错误仅在多个处理程序正在侦听CollectionChanged事件时发生,因此如果可能,请不要公开ObservableCollection属性。您可以将CollectionChanged事件封装到所需的侦听器。

public partial class BaseUserControl : UserControl
{
    ....

    public event NotifyCollectionChangedEventHandler? CollectionChanged;

    private void Items_CollectionChanged(object? sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        ....
        CollectionChanged?.Invoke(sender, e);
    }
}

字符串

相关问题