在子模型属性更改时重新评估命令CanExecute

时间:2016-10-10 12:52:03

标签: catel

目前我们有以下型号:

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中的属性发生变化时重新评估。

有一种简单的方法吗?

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

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

1 个答案:

答案 0 :(得分:1)

您需要编写自己的&#34;观看机制&#34;。您可以使用Catel中的ChangeNotificationWrapper来实现此目的。

每当儿童模特更新时,您都可以致电ViewModelCommandManager.InvalidateCommands(true)