响应和传播更改

创建、删除或更新元素时,可以编写代码,用于将更改传播到模型的其他部分,或传播到外部资源(如文件、数据库或其他组件)。

Reference

作为准则,请按以下顺序考虑以下技术:

方法 Scenarios 详细信息
定义一个计算领域属性。 一个域属性,其值是从模型中的其他属性计算的。 例如,价格是相关元素的价格之和。 计算和自定义存储属性
定义自定义存储域属性。 存储在模型的其他部分或外部的域属性。 例如,可以将表达式字符串分析为模型中的树。 计算和自定义存储属性
重写更改处理程序,如 OnValueChanging 和 OnDeleting 使不同的元素保持同步,并使外部值与模型保持同步。

将值限制为定义的范围。

在属性值和其他更改前后立即调用。 可以通过引发异常来终止更改。
域属性值更改处理程序
规则 在事务中发生更改时,可以定义规则,这些规则将在事务结束前排队执行。 它们不会在执行撤消或重做时被触发。 使用它们使商店的一部分与另一部分保持同步。 规则在模型中传播更改
存储事件 建模存储提供事件通知,例如添加或删除元素或链接,或更改属性的值。 该事件也会在执行撤消和重做时触发。 使用存储事件更新不在存储中的值。 事件处理程序在模型外传播更改
.NET 事件 形状具有响应鼠标单击和其他手势的事件处理程序。 必须为每个对象注册这些事件。 注册通常在 InitializeInstanceResources 的重写中完成,并且必须为每个元素完成注册。

这些事件通常发生在事务外部。
如何拦截对形状或装饰器的单击
边界规则 边界规则专门用于约束形状的边界。 BoundsRules 约束形状位置和大小
选择规则 选择规则专门限制用户可以选择的内容。 如何访问和限制当前所选内容
OnAssocatedPropertyChanged 使用阴影、箭头、颜色和线条宽度和样式等形状和连接线的特征指示模型元素的状态。 更新形状和连接线以反映模型

比较规则和存储事件

更改记录器、规则和事件在模型中发生更改时运行。

规则通常在发生更改的结束事务中应用,并在提交事务中的更改后应用事件。

使用存储事件将模型与应用商店外部的对象同步,以及规则以在应用商店中保持一致性。

  • 创建自定义规则 从抽象规则创建自定义规则作为派生类。 必须将此自定义规则通知框架。 有关详细信息,请参阅 规则在模型中传播更改

  • 订阅事件 在订阅事件之前,请创建事件处理程序和委托。 EventManagerDirectory然后使用该属性订阅事件。 有关详细信息,请参阅 事件处理程序在模型外传播更改

  • 撤消更改 撤消事务时,将引发事件,但不会应用规则。 如果规则更改了一个值,并且撤消了该更改,则该值将在撤消作期间重置为原始值。 引发事件时,必须手动将值更改回其原始值。 若要了解有关事务和撤消的详细信息,请参阅 如何:使用事务更新模型

  • 将事件参数传递给规则和事件 事件和规则都传递了一个 EventArgs 参数,该参数包含模型更改方式的信息。