CanExecute
をカスタムコマンド(Josh SmithのRelayCommand
)に呼び出す方法を知っている人はいますか?WPFコマンドをリフレッシュ
通常、UIで対話が発生するたびにCanExecute
が呼び出されます。何かをクリックすると、私のコマンドが更新されます。
私は、CanExecute
の条件が裏返しのタイマーによってオン/オフになっている状況があります。これはユーザーとのやりとりによって駆動されないため、ユーザーがUIと対話するまでCanExecute
は呼び出されません。最終的に私のButton
はユーザーがそれをクリックするまで有効/無効のままです。クリック後、正しく更新されます。ときにはButton
が有効になっているように見えることがありますが、ユーザーがクリックすると、発砲する代わりに無効に変わります。
CanExecute
に影響するプロパティがタイマーによって変更された場合、どのようにコードを更新することができますか? CanExecute
に影響を与えるプロパティでPropertyChanged
(INotifyPropertyChanged
)を実行しようとしましたが、それは役に立ちませんでした。
例XAML:
<Button Content="Button" Command="{Binding Cmd}"/>
の背後にあるコード例:
private ICommand m_cmd;
public ICommand Cmd
{
if (m_cmd == null)
m_cmd = new RelayCommand(
(param) => Process(),
(param) => EnableButton);
return m_cmd;
}
// Gets updated from a timer (not direct user interaction)
public bool EnableButton { get; set; }
コマンドに対してINotifyPropertyChangedを呼び出そうとしましたか?あなたはコマンドのフィールドを持つ必要はありません、ちょうど新しいものを毎回返します。この組み合わせはうまくいくはずです。または、強制が必要な場合にのみ新しいコマンドを作成します。 – egaga