当CanExecute为false时,带有启用主按钮的uwp MVVM ContentDialog

时间:2017-02-24 12:48:03

标签: c# xaml mvvm uwp uwp-xaml

我尝试使用mvvm构建类似于https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.contentdialog中的示例的ContentDialog。

对于CanExecute验证,我创建了https://social.msdn.microsoft.com/Forums/en-US/6d5d6fd9-5f03-4cb6-b6c0-19ca01ddaab8/uwpcontentdialog-buttons-do-not-respect-canexecute?forum=wpdevelop中描述的派生ContentDialog类

这样可行但是如何启用按钮以便可以单击CanExecute验证。

2 个答案:

答案 0 :(得分:0)

绑定到Views时,ICommand接口的CanExecuteChanged事件中缺少一个链接。只有当它是一个完美的情况时才有效,而根据我的经验,它几乎从来都不是完美的。

诀窍是在适当的值更改时调用CanExecuteChanged,将CanExecute切换为true或false。

如果您正在使用中继命令,我所做的就是为中继命令添加一个公共方法。

public UpdateCanExecute() => CanExecuteChanged?.Invoke(this, EventArgs.Empty);

然后在属性或属性或值中更改是否应该返回true或false,只需调用该方法。

public bool IsWorking
{
    get { return isWorking; }
    set
    {
       isWorking = value;
       Notify(nameof(IsWorking));
       MyRelayCommand.UpdateCanExecute();
    }
}

这可能会让你知道我在说什么。如果没有,或者如果您需要更多帮助,我可以在此答案中发布更多代码以帮助澄清。

答案 1 :(得分:0)

这是我的解决方案。我' ve创建了一个contentdialog扩展。扩展名包含

  • 一个CancelableCommand命令
  • CancelableCommandParameter参数
  • 和可绑定的DialogCancel属性。

这些是我的扩展程序的附加属性。

*

contentdialog的xaml看起来像那样

*

这是viewmodel

5