何时释放UserControl事件处理程序?

3
如果我在代码后台注册用户控件上的事件。例如:

public partial class PositionView : UserControl
{
    // If required ViewModel can be accessed using DataContext 
    public PositionViewModel ViewModel 
    {
        get { return (PositionViewModel) this.DataContext; }
    }

    public PositionView()
    {
        InitializeComponent();

        this.DataContextChanged += new System.Windows.DependencyPropertyChangedEventHandler(PositionView_DataContextChanged);
    }

    void PositionView_DataContextChanged(object sender, System.Windows.DependencyPropertyChangedEventArgs e)
    {
        this.ViewModel.UpdateTotalsChanged.Subscribe(_ => this.PositionGridControl.UpdateTotalSummary());
    }       
}

何时应该处理事件处理程序?没有可依附的IDisposable吗?

如果我通过XAML绑定事件,这是否是更清晰的解决方案以进行生存期管理?

1个回答

2
< p > Event 的源以及 EventHandler 均为本地变量。因此,当 UserControl 本身被收集时,它们也会被收集。

当收集 UserControl 时,没有其他对象保持您的 eventHandler 存活。因此,您无需手动实现“生命周期管理”。


好的,但在更一般的情况下,例如我可能会挂钩键盘事件等时呢?也就是说,当我不想依赖本地作用域时。 - DanH
我认为一个用户控件不应该绑定到其范围之外的事件,因为它应该是一个(数据绑定)单元。键盘事件实际上是在用户控件上触发的,因此您也可以在私有范围内处理这些事件。 - Myrtle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接