你的問題就出在你的ButtonsItemsControl
類的依賴屬性的聲明:
public ObservableCollection<FrameworkElement> BasedMenuItems
{
get { return (ObservableCollection<FrameworkElement>)GetValue(BasedMenuItemsProperty); }
set { SetValue(BasedMenuItemsProperty, value); }
}
public static readonly DependencyProperty BasedMenuItemsProperty =
DependencyProperty.Register("BasedMenuItems", typeof(ObservableCollection<FrameworkElement>), typeof(ButtonsItemsControl),
new PropertyMetadata(new ObservableCollection<FrameworkElement>()));
設置默認值是依賴屬性,這是ObservableCollection<FrameworkElement>
一個實例。但問題是,在創建這種情況下,當這條線是EXECUT編輯,這是當你的類被加載到內存中並且靜態字段被初始化時。因此,這意味着如果這些屬性未被覆蓋,每個ButtonsItemsControl
實例將共享相同的集合對象。
您應該刪除在PropertyMetadata
構造函數的默認值,而不是設置,當你控制實例化,在自己構造一個新值:
public ButtonsItemsControl()
{
BasedMenuItems = new ObservableCollection<FrameworkElement>();
...
}
這似乎違反直覺的,但據我所知,沒有更好的方法(實際上框架使用內部的工廠對象創建新的類實例來產生唯一的默認值,但是無論出於何種原因,他們沒有在框架之外公開這些工廠)。
非常感謝,我真的沒有想法,我也學到了一些東西。 – Loris 2015-02-24 14:33:32