wpf - 是否可以在需要时使用 get in property 创建命令的新实例?
问题描述
我使用了下一个代码
private String _Value = "hello";
//Set - just copy from value in _Value with PropertyChanged?.Invoke.
public String Value {get => _Value; set => Set(ref _Value, value);}
public ICommand DoSomeCommand{get => new SomeCommand(value);}
SomeCommand - 创建命令对象并保存值数据的类。
get=>new SomeCommand(vale);
在程序开始时仅初始化一个,并将值保持为“hello”,即使我更改了值。所以我需要在我的程序调用给定命令的任何时候创建新实例。据我了解,所有命令都存储在缓冲区中。但是是否可以让命令在访问时创建一个具有新值的新实例?
例如,当我随时单击某个按钮(具有此命令)时,会创建新实例 DoSomeCommand 并执行具有新值的命令。
解决方案
仅当视图初始化或源属性更改时,绑定才会自动更新。
因此,如果您想以这种方式执行命令,则必须在属性更改PropertyChanged
时手动通知命令的事件。Value
可能的实现(假设您的Set()
方法true
在值更改时返回):
private String _Value = "hello";
public String Value
{
get => _Value;
set =>
{
if (Set(ref _Value, value))
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(DoSomeCommand)));
}
}
}
public ICommand DoSomeCommand
{
get => new SomeCommand(value);
}
推荐阅读
- twincat - 隔离 CPU 的 TwinCAT 实时启动失败
- azure-devops - 在 Azure Pipelines 中运行预发布版本的 DotNetCoreCLI
- php - 尝试通过自定义分类术语过滤 Wordpress 查询
- python-3.x - URLFetch 不支持粒度超时设置,恢复为总或默认 URLFetch 超时
- python-3.x - 检查字典是否存在,然后只定义它
- python - cs50金融中无法使索引功能工作
- regex - Laravel Valet nginx 位置正则表达式在 Mac Catalina 上不起作用
- ruby-on-rails - 错误:对于 SELECT DISTINCT,ORDER BY 表达式必须使用 order by 和 uniq 出现在选择列表中
- azure - 如何为昨天的记录指定查询 Azure 数据工厂源(Azure 表存储)
- javascript - 如何使用 Firebase 实时数据库将信息从一个用户发送到另一个用户?