命令在第二次点击/点击时作出反应

时间:2016-01-10 19:03:39

标签: .net wpf mvvm data-binding uwp

我还在学习MVVM,使用INotifyPropertyChanged和ICommand,很抱歉,如果这是显而易见的事。

我有一个继承SimpleCommand

ICommand
class SimpleCommand : ICommand
{
    private Action _action;
    #region ICommand
    public event EventHandler CanExecuteChanged;
    public bool CanExecute(object parameter)
    {
        return true;
    }
    public void Execute(object parameter)
    {
        this._action();
    }
    #endregion
    public SimpleCommand(Action action)
    {
        _action = action;
    }
}

我是用户打电话的时候:

<Button Command="{Binding ChangePaneOpen }" .../>

应该更改变量PaneOpen:

public bool PaneOpen
{
    get { return _paneOpen; }
    set
    {
        _paneOpen = value;
        OnPropertyChanged("PaneOpen");
    }
}

public ICommand ChangePaneOpen
{
    get
    {
        return new SimpleCommand(() => { PaneOpen = !PaneOpen; });
    }
}

更改绑定值:

<SplitView IsPaneOpen="{Binding PaneOpen, Mode=OneWay}" ...>
    ....
</SplitView>

但是,出于某种原因,只有每一次点击(除了我第一次点击按钮)都会被反应。这不是双击,因为我可以在点击之间有一个很大的停顿。

我在这里做错了什么?

如果您需要有关代码的更多信息,请问我,我会尽力提供!

编辑:关闭SplitView始终只需点击一次(因此PaneOpen = false总是会做出正确的反应,奇怪的是,但打开SplitView始终需要双击/点按(我第一次点击按钮除外))

1 个答案:

答案 0 :(得分:1)

99%正确,我将解释会发生什么。

1.-当您点击按钮时,您将PaneOpen从false传递给true。 (右)

2.-当你打开窗格后点击窗格时,窗格会关闭,但它不会将PaneOpen更新为false,因为你在Mode = OneWay中设置绑定,你必须设置Mode = TwoWay来进行绑定双向并将PaneOpen再次设置为false。

这样你就可以完美地完成代码了。