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