要素が作成、削除、または更新されると、変更をモデルの他の部分、またはファイル、データベース、その他のコンポーネントなどの外部リソースに反映するコードを記述できます。
リファレンス
ガイドラインとして、次の順序でこれらの手法を検討してください。
| 手法 | シナリオ | 詳細情報 |
|---|---|---|
| 計算ドメイン プロパティを定義します。 | モデル内の他のプロパティから値が計算されるドメイン プロパティ。 たとえば、関連する要素の価格の合計である価格です。 | 計算およびカスタムストレージプロパティ |
| カスタム ストレージ ドメイン プロパティを定義します。 | モデルの他の部分または外部に格納されているドメイン プロパティ。 たとえば、式文字列をモデル内のツリーに解析できます。 | 算出済みおよびカスタム ストレージ プロパティ |
| OnValueChanging や OnDeleting などの変更ハンドラーをオーバーライドする | 異なる要素を同期させ、外部値をモデルと同期します。 定義された範囲に値を制限します。 プロパティ値とその他の変更の直前と後に呼び出されます。 例外をスローすることで、変更を終了できます。 |
ドメイン プロパティ値の変更ハンドラー |
| 準則 | 変更が発生したトランザクションの終了直前に実行キューに登録されるルールを定義できます。 元に戻すまたはやり直しでは実行されません。 ストアの一部を別のストアと同期させるために使用します。 | ルールによってモデル内に変更が反映される |
| イベントを格納する | モデリング ストアには、要素やリンクの追加や削除、プロパティの値の変更などのイベントの通知が用意されています。 イベントは、[元に戻す] と [やり直し] でも実行されます。 ストア イベントを使用して、ストア内にない値を更新します。 | イベント ハンドラーによってモデルの外部に変更が反映される |
| .NET イベント | 図形には、マウス クリックやその他のジェスチャに応答するイベント ハンドラーがあります。 オブジェクトごとにこれらのイベントに登録する必要があります。 登録は通常、InitializeInstanceResources のオーバーライドで行われ、各要素に対して行う必要があります。 通常、これらのイベントはトランザクションの外部で発生します。 |
方法: 図形またはデコレーターのクリックをインターセプトする |
| 境界ルール | 境界ルールは、図形の境界を制限するために特に使用されます。 | BoundsRules は図形の位置とサイズを制限する |
| 選択規則 | 選択規則は、ユーザーが選択できる内容を特に制限します。 | 方法: 現在の選択範囲にアクセスして制約する |
| OnAssocatedPropertyChanged | 影、矢印、色、線の幅やスタイルなどの図形とコネクタの特徴を使用して、モデル要素の状態を示します。 | モデルを反映するように図形とコネクタを更新する |
ルールを比較し、イベントを格納する
変更通知、ルール、およびイベントは、モデルで変更が発生したときに実行されます。
通常、ルールは変更が発生した最後のトランザクションで適用され、イベントはトランザクションの変更がコミットされた後に適用されます。
ストア イベントを使用して、モデルをストアの外部のオブジェクトと同期し、ルールを使用してストア内の一貫性を維持します。
カスタム ルールの作成 抽象ルールから派生クラスとしてカスタム ルールを作成します。 また、カスタム 規則についてフレームワークに通知する必要もあります。 詳細については、「ルールによって モデル内に変更が反映される」を参照してください。
イベントのサブスクライブ イベントをサブスクライブする前に、イベント ハンドラーとデリゲートを作成します。 次に、 EventManagerDirectoryプロパティを使用してイベントをサブスクライブします。 詳細については、「 イベント ハンドラーによるモデルの外部への変更の反映」を参照してください。
変更の取り消し トランザクションを元に戻すと、イベントは発生しますが、ルールは適用されません。 ルールが値を変更し、その変更を元に戻すと、元に戻す操作中に値が元の値にリセットされます。 イベントが発生した場合は、手動で値を元の値に戻す必要があります。 トランザクションと元に戻す方法の詳細については、「 方法: トランザクションを使用してモデルを更新する」を参照してください。
ルールとイベントにイベント引数を渡す イベントとルールの両方に、モデルがどのように変更されたかに関する情報を含む
EventArgsパラメーターが渡されます。