我有一堆UserControls('MyUserControl')我希望用户手动添加到一个或多个画布。 UserControl的一个实例不能是多个容器的子元素(否则'System.InvalidOperationException:Element已经是另一个元素的子元素。'被抛出)。
有没有办法在不创建MyUserControls的新(重复)实例的情况下执行此操作?如果不是,那么保持MyUserControls的重复实例同步的最佳策略是什么?
答案 0 :(得分:4)
您不能将控件的任何实例(任何控件)添加为多个父级的子级。您需要创建Usercontrol的多个实例,并将每个实例放在其自己的父实例上。
如果您需要保持它们同步显示的数据,那么您应该将该数据存储在与用户控件本身分开的对象中,其对象只有一个实例。通常,您将此数据对象分配给每个用户控件的DataContext属性,然后User控件的各个组件部分可以使用数据绑定获取其数据。
如果确保数据对象正确实现INotifyPropertyChanged
,那么当一个用户控件对数据进行更改时,它将反映在引用相同数据对象的所有其他用户控件中。