目前我们有以下型号:
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事件来实现这一点,但这似乎是一种肮脏的方式。
答案 0 :(得分:1)
您需要编写自己的&#34;观看机制&#34;。您可以使用Catel中的ChangeNotificationWrapper
来实现此目的。
每当儿童模特更新时,您都可以致电ViewModelCommandManager.InvalidateCommands(true)
。