MVVMLight的RelayCommand为什么使用WeakAction

时间:2018-06-26 18:29:25

标签: c# wpf mvvm garbage-collection mvvm-light

我注意到GalaSoft.MvvmLight.CommandWpf.RelayCommand<T>使用WeakAction<T>

这种设计考虑令我感到惊讶,我进行了进一步的研究。
浏览网页时,我遇到this blog post,这增强了我的怀疑,但没有回答我最初的问题“为什么?”

为什么GalaSoft故意使用WeakAction而不是普通的Action来允许函数收集垃圾?

谢谢。

2 个答案:

答案 0 :(得分:3)

  

为什么GalaSoft故意使用WeakAction而不是普通的Action来允许函数收集垃圾?

很可能是为了防止命令使动作的所有者保持活动状态,并导致MvvmLight应用程序中的内存泄漏。

使用WeakAction<T>,尽管命令可能不存在,但所有者仍然有资格进行垃圾回收,因为命令与操作的所有者之间没有强引用。

答案 1 :(得分:0)