创建、删除或更新元素时,可以编写代码,用于将更改传播到模型的其他部分,或传播到外部资源(如文件、数据库或其他组件)。
Reference
作为准则,请按以下顺序考虑以下技术:
| 方法 | Scenarios | 详细信息 |
|---|---|---|
| 定义一个计算领域属性。 | 一个域属性,其值是从模型中的其他属性计算的。 例如,价格是相关元素的价格之和。 | 计算和自定义存储属性 |
| 定义自定义存储域属性。 | 存储在模型的其他部分或外部的域属性。 例如,可以将表达式字符串分析为模型中的树。 | 计算和自定义存储属性 |
| 重写更改处理程序,如 OnValueChanging 和 OnDeleting | 使不同的元素保持同步,并使外部值与模型保持同步。 将值限制为定义的范围。 在属性值和其他更改前后立即调用。 可以通过引发异常来终止更改。 |
域属性值更改处理程序 |
| 规则 | 在事务中发生更改时,可以定义规则,这些规则将在事务结束前排队执行。 它们不会在执行撤消或重做时被触发。 使用它们使商店的一部分与另一部分保持同步。 | 规则在模型中传播更改 |
| 存储事件 | 建模存储提供事件通知,例如添加或删除元素或链接,或更改属性的值。 该事件也会在执行撤消和重做时触发。 使用存储事件更新不在存储中的值。 | 事件处理程序在模型外传播更改 |
| .NET 事件 | 形状具有响应鼠标单击和其他手势的事件处理程序。 必须为每个对象注册这些事件。 注册通常在 InitializeInstanceResources 的重写中完成,并且必须为每个元素完成注册。 这些事件通常发生在事务外部。 |
如何拦截对形状或装饰器的单击 |
| 边界规则 | 边界规则专门用于约束形状的边界。 | BoundsRules 约束形状位置和大小 |
| 选择规则 | 选择规则专门限制用户可以选择的内容。 | 如何访问和限制当前所选内容 |
| OnAssocatedPropertyChanged | 使用阴影、箭头、颜色和线条宽度和样式等形状和连接线的特征指示模型元素的状态。 | 更新形状和连接线以反映模型 |
比较规则和存储事件
更改记录器、规则和事件在模型中发生更改时运行。
规则通常在发生更改的结束事务中应用,并在提交事务中的更改后应用事件。
使用存储事件将模型与应用商店外部的对象同步,以及规则以在应用商店中保持一致性。
创建自定义规则 从抽象规则创建自定义规则作为派生类。 必须将此自定义规则通知框架。 有关详细信息,请参阅 规则在模型中传播更改。
订阅事件 在订阅事件之前,请创建事件处理程序和委托。 EventManagerDirectory然后使用该属性订阅事件。 有关详细信息,请参阅 事件处理程序在模型外传播更改。
撤消更改 撤消事务时,将引发事件,但不会应用规则。 如果规则更改了一个值,并且撤消了该更改,则该值将在撤消作期间重置为原始值。 引发事件时,必须手动将值更改回其原始值。 若要了解有关事务和撤消的详细信息,请参阅 如何:使用事务更新模型。
将事件参数传递给规则和事件 事件和规则都传递了一个
EventArgs参数,该参数包含模型更改方式的信息。