【问题标题】:How to find and delete Binding from dynamically added and deleted UserControl如何从动态添加和删除的用户控件中查找和删除绑定
【发布时间】: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

看起来父控件保持对已删除控件的引用,因为当我在活动控件中编辑值时,绑定到绑定属性的绑定会更新内存中已删除的控件。

【问题讨论】:

  • 您是否正在注册以处理您在父控件中处理的已删除控件上的任何事件,并且从未取消注册?这将创建一个隐式引用,以防止控件被垃圾收集。如果是这样,您将不得不明确地解除事件挂钩或查看弱事件模式。
  • 不,我不注册事件,但每个控件都有一个绑定。我可以通过跟踪了解绑定是如何工作的。

标签: silverlight data-binding


【解决方案1】:

作为解决方法,我实现了一个带有 IsActive 属性的接口 IActiveAware,当用户控件的逻辑生命周期结束时,该接口为 false。在 ViewModel 中的绑定属性上,我检查了这个属性。

【讨论】:

    猜你喜欢
    • 2019-11-09
    • 2016-08-02
    • 2015-03-03
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多