首页 > 解决方案 > 是否可以在需要时使用 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 并执行具有新值的命令。

标签: wpfmvvmdata-binding

解决方案


仅当视图初始化或源属性更改时,绑定才会自动更新。

因此,如果您想以这种方式执行命令,则必须在属性更改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);
}

推荐阅读