【问题标题】:Command reacts on second click/tap命令在第二次单击/点击时做出反应
【发布时间】:2016-04-15 01:21:36
【问题描述】:

我仍在学习 MVVM,使用 INotifyPropertyChanged 和 ICommand,如果这很明显,很抱歉。

我有一个继承 ICommandSimpleCommand

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 总是需要双击/点击(除了第一次点击按钮))

【问题讨论】:

    标签: .net wpf mvvm data-binding uwp


    【解决方案1】:

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

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

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

    这样你的代码就完美了。

    【讨论】:

    • 是的,做到了。我明白我做错了什么,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多