参考
环境
软件/系统 | 版本 | 说明 |
---|---|---|
Windows | Windows 10 专业版 22H2 19045.4046 | |
Microsoft Visual Studio | Microsoft Visual Studio Community 2022 (64 位) - 17.6.5 | |
Microsoft .Net SDK | 8.0.101 | 手动安装 |
Microsoft .Net SDK | 7.0.306 | Microsoft Visual Studio 携带 |
.net | 6.x | 创建当前文章演示 WPF 项目时指定 .net 版本所选择的框架 |
Prism Template Pack | 2.4.1 | Microsoft Visual Studio 扩展 |
XAML Style for Visual Studio 2022 | 3.2311.2 | Microsoft Visual Studio 扩展(XAML 自动格式化) |
HandyControl | 3.5.1 | NuGet包 |
Prism.DryIoc | 8.1.97 | NuGet包 |
提示
本文使用到了 Prism ,但是未使用该框架也可以用本方法解决。
正文
问题
在 ViewModel 中定义了 bool Listening
,在 XAML CommandParameter 中进行绑定,当 Listening
值更新时,CommandParameter 接收的 Listening
不更新。
解决
实现命令接口 ICommand
时自动实现了 public event EventHandler CanExecuteChanged;
,需要调整为如下代码才可以重新触发 CanExecute 事件 :
public event EventHandler CanExecuteChanged {
add{CommandManager.RequerySuggested += value;}
remove{CommandManager.RequerySuggested -= value;}
}
完整命令接口 ICommand
实现为:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using static ImTools.ImMap;
namespace FileMonitoring.Commands
{
/**
* 开启监听命令
*/
internal class OnStartListenCommand : ICommand
{
private Action<object?> _execute;
public OnStartListenCommand(Action<object?> execute)
{
_execute = execute;
}
public event EventHandler CanExecuteChanged {
add{CommandManager.RequerySuggested += value;}
remove{CommandManager.RequerySuggested -= value;}
}
public bool CanExecute(object parameter)
{
return !(parameter as bool?) ?? false;
}
public void Execute(object parameter)
{
Trace.WriteLine("开启监听命令");
_execute(parameter);
}
}
}
标签:CommandParameter,System,public,Visual,参数,using,WPF,Microsoft,Studio
From: https://www.cnblogs.com/xiaqiuchu/p/18063220