私はMVVM & WPFのいくつかの例を使って作業していましたが、デバッグ中に私のビューのボタンに関連付けられたRelayCommandが(ImportHoursCommandを実行して)すぐにプログラムが開始されます。ここでWPF&RelayCommand - ボタンは常に点滅します
コードスニペットは、次のとおりです。
ビュー
<Button x:Name="ImportHoursButton" Content="Import Hours"
Command="{Binding ImportHoursCommand}"
Height="25" Width="100" Margin="10"
VerticalAlignment="Bottom" HorizontalAlignment="Right"
Grid.Row="1" />
のViewModel
private RelayCommand _importHoursCommand;
public ICommand ImportHoursCommand
{
get
{
if (_importHoursCommand == null)
{
_importHoursCommand = new RelayCommand(param => this.ImportHoursCommandExecute(),
param => this.ImportHoursCommandCanExecute);
}
return _importHoursCommand;
}
}
void ImportHoursCommandExecute()
{
MessageBox.Show("Import Hours",
"Hours have been imported!",
MessageBoxButton.OK);
}
bool ImportHoursCommandCanExecute
{
get
{
string userProfile = System.Environment.GetEnvironmentVariable("USERPROFILE");
string currentFile = @userProfile + "\\download\\test.txt";
if (!File.Exists(currentFile))
{
MessageBox.Show("File Not Found",
"The file " + currentFile + " was not found!",
MessageBoxButton.OK);
return false;
}
return true;
}
}
私は 'という文字列USERPROFILE = ...' 行にブレークポイントを置く場合プログラムを実行すると、Visual Studioはブレークポイントで停止し、breakpoiで停止し続けますnt毎回デバッグの「続行」ボタンをクリックします。ブレークポイントがない場合、プログラムは正常に実行されますが、このコマンドは実行可能かどうかを常にチェックする必要がありますか?
私はJosh Smithの記事hereのRelayCommandを使用しています。
これは意味があります。私が行ってきた例では、CanExecuteがボタン自体を制御していたことを明確にしていませんでした。コマンド自体が実行可能かどうかを判断する方法だと思った。 – BrianKE
@BrianKEいいえ、あなたが 'Command.Execute()'を手動で実行した場合は、まず 'Command.CanExecute()'を実行してください – Rachel