重新评估子模型上的命令 CanExecute 属性 更改

Reevaluate command CanExecute on child model property change

目前我们有以下型号:

public class Model : ModelBase
{
    public Model()
    {
        ChildModel = new ChildModel();
    }

    public string FirstName
    {
        get { return GetValue<string>(FirstNameProperty); }
        set { SetValue(FirstNameProperty, value); }
    }

    public static readonly PropertyData FirstNameProperty = RegisterProperty("FirstName", typeof(string), string.Empty);

    public ChildModel ChildModel
    {
        get { return GetValue<ChildModel>(ChildModelProperty); }
        set { SetValue(ChildModelProperty, value); }
    }

    public static readonly PropertyData ChildModelProperty = RegisterProperty("ChildModel", typeof(ChildModel), null);
}

public class ChildModel : ModelBase
{
    public static readonly PropertyData TestStringProperty = RegisterProperty("TestString", typeof(string), null);

    public string TestString
    {
        get { return GetValue<string>(TestStringProperty); }
        set { SetValue(TestStringProperty, value); }
    }
}

我们在 ViewModel 中使用模型

[Model]
public Model AModel
{
    get { return GetValue<Model>(AModelProperty); }
    private set { SetValue(AModelProperty, value); }
}

public static readonly PropertyData AModelProperty = RegisterProperty("Prescription", typeof(Model));

我们的 ViewModel 中有一个带有 CanExecute 函数的命令。 我希望 CanExecute 在模型或 ChildModel 中的 属性 更改时重新评估。

有没有简单的方法来做到这一点?

(请注意,我们的实际生产模型有多个子模型和包含其他 ModelBase 的列表)

目前我正在通过挂钩所有子模型上的所有 PropertyChanged 事件来实现,但这似乎是一种肮脏的方式。

您需要自己编写 "watching mechanism"。为此,您可以使用 Catel 中的 ChangeNotificationWrapper

每当子模型更新时,您可以调用ViewModelCommandManager.InvalidateCommands(true)