私はMVVMを初めて使用し、リスト内のアイテムのいずれかが選択された場合に有効になり、選択されたlistitemをお気に入りリストに追加する簡単なコマンドボタンを作成したいと考えています。ここに私の AddCommand 実装があります:
class AddFavCommand : ICommand
{
private readonly Action _favAction;
private readonly bool _canExecute;
public AddFavCommand()
{
}
public AddFavCommand(Action favAction, bool canExecute)
{
_favAction = favAction;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
return _canExecute;
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public void Execute(object parameter)
{
_favAction();
}
}
ビュー モデルでは、ビューとのバインディングを行うために、パブリック プロパティ AddFavCommand があります。
private AddFavCommand _addFavCommand;
private bool _canAddFavExecute;
public ICommand AddFavCommand
{
get
{
if (_addFavCommand == null)
{
_addFavCommand = new AddFavCommand(AddFav, _canAddFavExecute);
}
return _addFavCommand;
}
}
そして今のところ、コマンドが機能するかどうかを確認するための簡単な機能があります:
private void AddFav()
{
MessageBox.Show("Add");
}
したがって、この部分は canExecute プロパティを実装しなくても完全に機能します。しかし、リスト内のリスト項目が選択されていないときにボタンを無効にしたいのです。私は財産を持っています:
CurrentItem
これはリスト アイテムにバインドされ、アイテムが選択されていない場合は null になります。私の質問は、アイテムが選択されていないときにボタンを無効にする方法です。私は追加しようとしました:
private void AddFav()
{
MessageBox.Show("Add");
_canAddFavExecute = CurrentItem != null; // to my function, but my button always stays disabled.
}
ありがとう