我还在学习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
始终需要双击/点按(我第一次点击按钮除外))
答案 0 :(得分:1)
99%正确,我将解释会发生什么。
1.-当您点击按钮时,您将PaneOpen从false传递给true。 (右)
2.-当你打开窗格后点击窗格时,窗格会关闭,但它不会将PaneOpen更新为false,因为你在Mode = OneWay中设置绑定,你必须设置Mode = TwoWay来进行绑定双向并将PaneOpen再次设置为false。
这样你就可以完美地完成代码了。