我發現了一個C#類ActionCommand,它實現了ICommand並以Execute和CanExecute的委託爲基礎。到目前爲止我看起來非常完美。C#ActionCommand:ICommand到VB.net的翻譯
public class ActionCommand : ICommand
{
private readonly Action<object> _executeHandler;
private readonly Func<object, bool> _canExecuteHandler;
public ActionCommand(Action<object> execute, Func<object, bool> canExecute)
{
if (execute == null)
throw new ArgumentNullException("Execute cannot be null");
_executeHandler = execute;
_canExecuteHandler = canExecute;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
_executeHandler(parameter);
}
public bool CanExecute(object parameter)
{
if (_canExecuteHandler == null)
return true;
return _canExecuteHandler(parameter);
}
}
現在我把它翻譯成我需要VB.net變種(使用代碼翻譯和一些手)
Public Class ActionCommand
Implements ICommand
Public Event CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged
Private ReadOnly _executeHandler As Action(Of Object)
Private ReadOnly _canExecuteHandler As Func(Of Object, Boolean)
Public Sub New(ByVal execute As Action(Of Object),
ByVal canExecute As Func(Of Object, Boolean))
If execute Is Nothing Then
Throw New ArgumentNullException("Execute cannot be null")
End If
_executeHandler = execute
_canExecuteHandler = canExecute
End Sub
Public Sub Execute(ByVal parameter As Object) Implements ICommand.Execute
_executeHandler(parameter)
End Sub
Public Function CanExecute(ByVal parameter As Object) As Boolean Implements ICommand.CanExecute
If (_canExecuteHandler Is Nothing) Then
Return True
End If
Return _canExecuteHandler(parameter)
End Function
End Class
我的問題是圍繞CanExecuteChanged和註冊/映射從CommandManager.RequerySuggested的事件CanExecuteChanged。在線譯碼器建議如下:
Public Custom Event CanExecuteChanged As EventHandler
AddHandler(ByVal value As EventHandler)
CommandManager.RequerySuggested += value
End AddHandler
RemoveHandler(ByVal value As EventHandler)
CommandManager.RequerySuggested -= value
End RemoveHandler
End Event
但這不能satify ICommand.CanExecuteChanged 是否有人可以幫助如何翻譯或解決這個問題?
周圍的RaiseEvent的部分是成功的關鍵。有了這個,自定義事件可以實現IComamnd.CanExecuteChanged。我以這種方式簡化了它,它看起來更像MarkJ的答案。 – Markus 2011-03-30 12:41:40