重新评估子模型上的命令 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)
。
目前我们有以下型号:
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)
。