Konstruktor której zgłoszenie zostanie zaksięgowana wywołuje inny konstruktor, więc to wytłumaczyć, powinniśmy najpierw przyjrzeć pod sygnaturą drugiego konstruktora:
public DelegateCommand(Action<T> executeMethod, Func<T, bool> canExecuteMethod)
Drugi parametr to Func<T, bool>
. Oznacza to, że jest to funkcja, która przyjmuje parametr typu T
i zwraca wartość logiczną.
Teraz, jeśli spojrzeć na lambda, który jest używany:
(o) => true
lambdas w ogóle mają składnię (parameter-list) => lambda-body
, więc w tym przypadku pojedynczy parametr lambda jest zmienną o
(który typ jest implikowana być T
) i funkcja zwraca stały wynik true
.
Celem tego jest zasadniczo wykonanie polecenia, które jest zawsze wykonywalne.
Oczywiście, że lambda może wyglądać o wiele bardziej skomplikowana, więc podczas używania DelegateCommand, prawdopodobnie użyjesz bardziej złożonych i niestałych wyrażeń. Na przykład:
new DelegateCommand(DoSomething, o => o.SomeProperty >= 0 && o.SomeProperty < 10 && o.SomeBoolProperty)
to tylko parametr wejściowy do orzecznika, który nie jest używany - w tym wypadku orzeczenie zawsze zwraca wartość true - Podejrzewam, że jest to domyślny w przypadku nie orzecznikiem jest przekazywana w – BrokenGlass
to [poradnik]. (http://msdn.microsoft.com/en-us/library/vstudio/bb882516.aspx) pomoże ci zrozumieć anonimowe metody i lambdę. BTW to tylko parametr wejściowy. –