【发布时间】:2010-09-15 17:29:16
【问题描述】:
我有一组 UserControl,它们共享同一个业务对象 (ViewModel),但仅 以不同的方式显示其中的数据。
我通过组合框选择了一个活动的用户控件。我从 StackPanel 中删除旧的 UserControl 并添加新的 UserControl。
var uiElement = thisObject.EditorsContainer.Children.FirstOrDefault();
if (uiElement != null)
{
thisObject.EditorsContainer.Children.Remove(uiElement);
uiElement.Cast<UserControl>().ClearValue(DataContextProperty);
}
EditorsContainer 是 StackPanel
看起来父控件保持对已删除控件的引用,因为当我在活动控件中编辑值时,绑定到绑定属性的绑定会更新内存中已删除的控件。
【问题讨论】:
-
您是否正在注册以处理您在父控件中处理的已删除控件上的任何事件,并且从未取消注册?这将创建一个隐式引用,以防止控件被垃圾收集。如果是这样,您将不得不明确地解除事件挂钩或查看弱事件模式。
-
不,我不注册事件,但每个控件都有一个绑定。我可以通过跟踪了解绑定是如何工作的。