Các MSDN magazine article by Josh Smith on MVVM chứa một biểu thức lambda tôi không hoàn toàn hiểu. Mục đích của param trong mã này là gì?Tại sao param trong biểu thức lambda này?
_saveCommand = new RelayCommand(param => this.Save(),
param => this.CanSave);
Dịch sang các ngôn ngữ ưa thích của tôi VB đó là:
Dim saveAction as New Action(Of Object)(AddressOf Me.Save)
_saveCommand = New RelayCommand(saveAction, Function(param) Me.CanSave)
tôi sẽ dự kiến sẽ chỉ nhìn thấy param nếu được sử dụng trong vòng CanSave hoặc Save. Tôi hơi mới với các biểu thức lambda. Thật kỳ lạ khi tôi thấy một biến không được khai báo và cũng không được sử dụng ở bất kỳ nơi nào mà tôi có thể nói. Mọi lời giải thích sẽ được đánh giá cao.
Để đặt điều này trong bối cảnh các nhà xây dựng cho RelayCommand (C#) là:
public RelayCommand(Action<object> execute, Predicate<object> canExecute)
và trong VB:
Public Sub New(ByVal execute As Action(Of Object), _
ByVal canExecute As Predicate(Of Object))
Tôi nghĩ mình đã hiểu ngay bây giờ. Nhưng tại sao thực hiện khai báo là Action (Of Object) khi Object bị bỏ qua? Có phải vì RelayCommand Implements ICommand.Execute (có tham số đối tượng) không? Công cụ gây nhầm lẫn - Tôi nhớ VB6! – DeveloperDan
@DeveloperDan: 'RelayCommand' không biết bạn có bỏ qua tham số hay không. Nó sẽ * cho * bạn giá trị có liên quan - nó chỉ xảy ra khi các đại biểu này sẽ bỏ qua nó. Hãy nghĩ nó giống như một trình xử lý sự kiện - không phải mọi trình xử lý sự kiện đều sử dụng 'người gửi' hoặc' args', phải không? Họ chỉ vui vẻ bỏ qua chúng, và tất cả đều tốt. Nó hoàn toàn giống nhau ở đây. –
Cảm ơn Jon. Bạn đã giải thích rõ điều này. Và tôi thấy bạn khá sung mãn. Tôi có ý định tìm hiểu nhiều hơn từ các bài đăng khác của bạn, webcast và podcast. – DeveloperDan