私はMVVMパターンを使用しています。私の見解では、人の詳細用のテキストボックスがあり、そのうちの 1 つが idBox です。また、ビューはいくつかのボタンで構成されており、そのうちの 1 つが editModeBtn です。
idBox 内に有効な int がある場合にのみ、editModeBtn を有効にしたいと考えています。
editBtn の Xaml (ビュー内) は次のようになります。
<Button x:Name="editModeBtn" Content="Edit" Command="{Binding ChangeToEditScreenCommand}" CommandParameter="{Binding ElementName=idBox, Path=Text}"></Button>
対応するビューモデルには、次のコードがあります。
private RelayCommand<string> _changeToEditScreenCommand;
public RelayCommand<string> ChangeToEditScreenCommand
{
get
{
if (_changeToEditScreenCommand == null)
{
_changeToEditScreenCommand = new RelayCommand<string>((param) => ChangeToEditScreen(), (param) => CanEdit(param));
}
return _changeToEditScreenCommand;
}
}
また、CanExecute メソッド (私の場合は CanEdit) で、パラメーター (id) が有効な int に設定されているかどうかを確認し、true を返したいと考えています。そうでなければ、偽。
private bool CanEdit(string currentInsertedId)
{
int idValue;
bool result = Int32.TryParse(currentInsertedId, out idValue);
if (result)
{
if (idValue > 0) { return true; };
return false;
}
return false;
}
基本的に、idBox に何かが書き込まれたり削除されたりするたびに、コマンドの canExecute メソッドが呼び出されるようにします。コマンドの RaiseCanExecuteChanged() はどこに置くべきですか? MVVM を使用していない場合は、textBox の textChanged イベントに入れることができますが、ここではそうではありません。RaiseCanExecuteChanged を使用したことがないので、確認したいだけです。ありがとう!