Почему RelayCommand MVVMLight использовал WeakAction - PullRequest
0 голосов
/ 26 июня 2018

Я заметил, что GalaSoft.MvvmLight.CommandWpf.RelayCommand<T> использует WeakAction<T>.

это соображение дизайна меня удивило, и я немного углубился в изучение.
просматривая веб-страницу, я наткнулся на это сообщение в блоге , которое усилило мои подозрения, но не ответило на мой первоначальный вопрос "Почему?"

Почему GalaSoft намеренно использует WeakAction вместо простого Action, позволяющего функциям собирать мусор?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Почему GalaSoft намеренно использует WeakAction вместо простого Action, позволяющего функциям собирать мусор?

Скорее всего, для предотвращения того, чтобы команды (команды) оставляли в живых владельца (ей) действия, и вызывали утечки памяти в приложении MvvmLight.

Используя WeakAction<T>, владелец по-прежнему имеет право на сборку мусора, несмотря на то, что команда может отсутствовать, поскольку нет строгой ссылки между командой и владельцем действия.

0 голосов
/ 26 июня 2018

Это для создания Weak Reference с владельцем Action. Тем более, что владелец Action может в любое время собрать мусор.

Ссылка

http://www.mvvmlight.net/help/SL5/html/aac8fdf1-873d-4e6b-ce31-af2dcf02d1d0.htm https://github.com/lbugnion/mvvmlight/blob/master/GalaSoft.MvvmLight/GalaSoft.MvvmLight%20(PCL)/Helpers/WeakAction.cs

...