1

XAMLにDataTriggerプロパティにバインドされている 'ShowEffect' が ViewModel クラスにあります。RelayCommandメソッドを呼び出す(以下に示すクラス)にバインドされたボタンもあります。そのメソッドでは、'ShowEffect' を true に設定しました。ただし、 はDataTrigger応答していないようです。効果は表示されません。

次を使用してプロパティを宣言します。

private Boolean _ShowEffect;
    public Boolean ShowEffect
    {
        get { return _ShowEffect; }
        set { _ShowEffect = value; }
    }

RelayCommandクラス:

public class RelayCommand : ICommand
{
    public RelayCommand(Action<object> execute)
        : this(execute, null)
    {
    }
    public RelayCommand(Action<object> execute, Predicate<object> canExecute)
    {
        if (execute == null)
            throw new ArgumentNullException("execute");
        _execute = execute;
        _canExecute = canExecute;
    }
    public bool CanExecute(object parameter)
    {
        return _canExecute == null ? true : _canExecute(parameter);
    }
    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
    public void Execute(object parameter)
    {
        _execute(parameter);
    }
    private readonly Action<object> _execute;
    private readonly Predicate<object> _canExecute;
}

問題がディスパッチャに関連しているかどうか疑問に思っています。コマンドによって呼び出されたメソッドでプロパティを設定すると、バインディングが機能しない理由を誰かが提案できますか? ViewModel の他の場所にプロパティを設定すると機能します。

4

1 に答える 1

0

前のコメントを回答に変換します。

VM に INPC が実装されていない場合は実装する必要があり、ShowEffect は変更されたときに (値が変更されたときにセッターから) propertychanged ハンドラーを発生させて、変更がビューによって認識されるようにする必要があります。あなたが今得たのは、コマンドが値を変更したときに何が起こっているのかをビューに通知しない単純なプロパティですが、ビューは変更について知ることができず、DataTrigger が機能していないようです。

INotifyPropertyChangedインターフェイスは、VM のプロパティが変更されたことをビューに通知するものです。したがって、プロパティは PropertyChanged ハンドラーを発生させて、それに加えられた変更をビューに通知する必要があります。

于 2013-07-28T20:50:21.140 に答える