Silverlight と WPF のエンタープライズ アーキテクチャ向けの MVVM サバイバル ガイドに取り組んでいますが、コマンド セクションで問題が発生しました。具体的には、Action<object> と Func<object, bool> に基づいてコマンドを作成します。「アプリケーションをビルドして実行する」はずの時点で、代わりにコンパイル エラーが発生します。
コマンドのもの:
public class Command : ICommand
{
private readonly Action<object> _execute;
private readonly Func<object, bool> _canExecute;
public Command(Action<object> execute, Func<object, bool> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
public void Execute(object parameter)
{
_execute(parameter);
}
public bool CanExecute(object parameter)
{
return (_canExecute == null) || _canExecute(parameter);
}
...
}
メソッド呼び出しのもの:
private Command _showDetailsCommand;
public Command ShowDetailsCommand
{
get
{
return _showDetailsCommand
?? (_showDetailsCommand
= new Command(ShowCustomerDetails, IsCustomerSelected));
}
}
public void ShowCustomerDetails()
{
if (!IsCustomerSelected()){
throw new InvalidOperationException("Unable to display customer details. "
+ "No customer selected.");
}
CustomerDetailsTabViewModel customerDetailsViewModel =
GetCustomerDetailsTab(SelectedCustomerID);
if (customerDetailsViewModel == null)
{
customerDetailsViewModel
= new CustomerDetailsTabViewModel
(_dataProvider,
SelectedCustomerID);
Tabs.Add(customerDetailsViewModel);
}
SetCurrentTab(customerDetailsViewModel);
}
private bool IsCustomerSelected()
{
return !string.IsNullOrEmpty(SelectedCustomerID);
}
new Command(ShowCustomerDetails, IsCustomerSelected))
「最適なオーバーロードされた一致にNorthwind.Application.Command.Command(System.Action<object>, System.Func<object, bool>)
は無効な引数があります」というビットの下に波状の青い線が表示されます。
コンパイルしようとすると、上記のエラーに加えて、次の 2 つのメッセージが表示されます。
Argument 1: Cannot convert from method group to System.Action<object>
Argument 2: Cannot convert from method group to System.Func<object, bool>
今では、昨日よりもアクションと関数について多くのことを知っており、コマンド宣言を次のように変更することで、エラーをほとんど回避できます。
private readonly Action _execute;
private readonly Func<bool> _canExecute;
ICommand
コード全体で同様のことを行っていますが、適切に実装していないというエラーが表示されます。
私の額/最も近い壁を保存するために、誰かが私が正しく行っていないことを教えて修正できるようにするか、指定された(本の)コードが私をうまくいっていないので先に進むことができます.