如标题所述,我正在尝试实现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
}
}
字符串
1条答案
按热度按时间bis0qfac1#
在CollectionChanged事件期间,我收到无法修改ObservableCollection运行时错误
此错误仅在多个处理程序正在侦听
CollectionChanged
事件时发生,因此如果可能,请不要公开ObservableCollection
属性。您可以将CollectionChanged
事件封装到所需的侦听器。字符串