是否需要取消订阅在xaml WPF中订阅的事件,如果需要,如何取消订阅事件?

是否需要取消订阅在xaml WPF中订阅的事件,如果需要,如何取消订阅事件?,wpf,xaml,Wpf,Xaml,是否有必要取消订阅在Xaml WPF中订阅的事件??。如果是,我如何取消订阅活动??在下面的代码中,我订阅了Xaml中的MouseDown和OnCellClosed事件。如果真的有必要取消订阅活动,那么我如何才能做到这一点 <DataTemplate x:Key="Style2"> <local:MyCellStyle2 MouseDown="MyCellStyle2_MouseDown" OnCellClosed="MyCellStyle2_OnCellClose

是否有必要取消订阅在Xaml WPF中订阅的事件??。如果是,我如何取消订阅活动??在下面的代码中,我订阅了Xaml中的MouseDown和OnCellClosed事件。如果真的有必要取消订阅活动,那么我如何才能做到这一点

<DataTemplate  x:Key="Style2">
     <local:MyCellStyle2 MouseDown="MyCellStyle2_MouseDown" OnCellClosed="MyCellStyle2_OnCellClosed"   />
</DataTemplate>

更新:
我使用的是一个带有上面定义的itemtemplate的列表框。列表框中的每个项目都将显示datatemplate“MyCellStyle2”。此“MyCellStyle2”控件有一个关闭按钮,单击该按钮时,该对象将从listbox的集合中删除,但该对象的mousedown和OnCellClosed事件(见上文)仍被订阅,这将不允许对删除的项进行垃圾收集。我怎样才能克服这个问题。如果我错了,请纠正我。

不,您不必取消这些活动的订阅。当您的窗口关闭时,所有打开和关闭的窗口都将被释放,因此不需要取消订阅,也不会发生内存泄漏。如果您确实想从代码隐藏中取消订阅其中一个事件,例如暂时关闭该事件,您可以按照中的说明执行此操作

更新 至于您的
MyCellStyle2
场景,我仍然认为您不必担心事件取消订阅。在您描述的安排中,您的
窗口
包含对
列表框
的引用,该列表框包含对项目的引用,而项目又包含对
窗口
公开的事件的引用,有效地包含对
窗口
的引用。请注意,引用事件的是项,而不是相反,因为当发生某些事情时,应该调用相应事件的是项。因此,当该项从
列表框中删除时,它应该被垃圾收集,因为对它的引用被释放,即使它包含对其他对象的引用


另一方面,如果您确实观察到这些项目在删除后内存泄漏,可能还有其他原因。您很可能正面临和中所述的问题。解决方法是实现INotifyPropertyChanged接口。

无需取消订阅在Xaml中创建的事件。您需要取消订阅在代码隐藏中创建的事件

例如:

this.MouseDoubleClick+=UserControl1\u MouseDoubleClick


this.MouseDoubleClick-=UserControl1\u MouseDoubleClick

在什么情况下需要它?如果我不取消订阅它,它不会造成内存泄漏吗?不,依赖性是另一种方式。移除的对象引用事件处理程序的集合。因此,只要对象保持活动状态,目标(可能是您的窗口对象)就不会被垃圾收集。但是,如果没有其他引用指向该对象,则可以随时收集该对象本身。事件处理程序不引用事件发布服务器。要记住的关键一点是:如果发布服务器的寿命比订阅服务器长,那么是的,您需要取消订阅事件。在这种情况下,情况并非如此。你的手机风格不会比你所在的班级长久。所以不,不需要退订,知道了。谢谢@SriramsakthivelHi,当我们关闭窗口时,您是对的,一切都会得到处理。但是如果我不关窗户怎么办??我已经更新了我的问题,请检查。如果您需要更多infoHi Joby,请告诉我为什么不需要取消订阅在XAML中创建的事件??Xaml是否会自动取消订阅其活动,如果是,何时何地取消订阅?对不起。但如果说您不需要取消订阅xaml中的事件,而需要取消订阅在代码隐藏中订阅的事件,那就太荒谬了。Xaml或代码隐藏在这里是不相关的。请参考我上面的评论,了解更多细节。。