我尝试使用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验证。
答案 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扩展。扩展名包含
这些是我的扩展程序的附加属性。
*
contentdialog的xaml看起来像那样
*
这是viewmodel
5