引用类型为默认值的依赖属性最佳实现方式咨询
依赖属性引用类型默认值的共享问题及解决办法
我定义了这样的依赖属性:
public static DependencyProperty ItemsProperty = DependencyProperty.Register(nameof(Items), typeof(ObservableCollection<ContentControl>), typeof(Group), new PropertyMetadata(new ObservableCollection<ContentControl>()));
这里存在一个问题:把引用类型作为依赖属性的默认值时,这个默认实例只会被创建一次。当创建Group类的第二个实例时,所有实例都会共享同一个ObservableCollection引用,导致不同实例的Items数据相互干扰。
可行解决方式
不要在依赖属性注册时设置默认值,而是在类的构造函数里初始化新的集合实例:
public static DependencyProperty ItemsProperty = DependencyProperty.Register(nameof(Items), typeof(ObservableCollection<ContentControl>), typeof(Group)); public Group() { Items = new ObservableCollection<ContentControl>(); }
这样每个Group实例都会拥有独立的ObservableCollection对象,彻底避免了引用共享的问题。
内容的提问来源于stack exchange,提问作者Cryosys
相关产品推荐
相关产品推荐

