私はMVVM-Lightを使用しており、リレーコマンドが完全に機能しています。実装する必要があることを読みCanExecuteChanged
ましたCanExecute
. 私は良い例を見つけることができませんが。
これらを実装する方法の良い例はありますか。
CanExecute は、実行できない場合に False を返す必要がありますが、ボタンを無効にするだけではありませんか??
いつ実行しCanExecuteChanged
ますか?
それぞれをいつ使用するかの良い例は誰にもありますが、私のコードはなくても機能しますが、このブログ投稿では、これらの項目を実装する必要があると述べています。
Enabled
ボタンや同様のコントロールを無効にできるように、プロパティまたは何かをViewModelのプロパティにバインドするだけだと思っていたので、少し混乱していますか?
理解の助けがあれば、本当に感謝しています。
編集
これは私が今持っているものです...動作していますが、ボタンが物理的に無効になっておらず、falseを返しているためコマンドが実行されません。RaiseCanExecuteChanged を強制的に実行するために、コンストラクターで CanExecuteMe を呼び出しています ...
これは、ビューモデルのコンストラクターで実行されます
this.Page2Command = new RelayCommand(() => this.GoToPage2(), () => CanExecuteMe);
CanExecuteMe = false;
これが私のコードの残りの部分です。例から取ったものです。
private bool _canIncrement = true;
public bool CanExecuteMe
{
get
{
return _canIncrement;
}
set
{
if (_canIncrement == value)
{
return;
}
_canIncrement = value;
// Update bindings, no broadcast
//RaisePropertyChanged(CanIncrementPropertyName);
Page2Command.RaiseCanExecuteChanged();
}
}
public RelayCommand Page2Command
{
get;
private set;
}
private object GoToPage2()
{
System.Windows.MessageBox.Show("Navigate to Page 2!");
return null;
}
そして、ここに私のXAMLがあります
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="31,77,0,0" x:Name="button1" VerticalAlignment="Top" Width="75" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding Page2Command, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>