これを行う絶対的な最善の方法は、データ モデルに階層ツリーを作成することです。したがって、子を持つすべてのノードについて、選択したプロパティがある場合は、それらの子の選択したプロパティも変更します。このように、ADG は単なるデータの状態のビューです。次に、チェックボックスの変更イベントをこの選択したプロパティに関連付けます。
[木のサンプルを表示するように編集]
XML と同様に、データ構造はツリー リーフ/ノード パラダイムを持つことができます。例 (疑似コード):
「人」の木:
var gf:Person = new Person();
gf.name = 'Frank';
var gm:Person = new Person();
gm.name = 'Elise';
var c1:Person = new Person();
c1.name = 'Mary';
var c2:Person = new Person();
c2.name = 'Frank Jr';
var c3:Person = new Person();
c3.name = 'Sam';
var couple:PersonGroup = new PersonGroup();
couple.relation = [gm, gf];
couple.children = [c1, c2, c3];
//now you add another 'married PersonGroup to child one, and their children'
したがって、「子」プロパティがあるため、HierarchicalData はこれを操作する方法を知っていますが、「ノード」に別の名前が付けられている場合、それらは別のものに設定できるフィールドです。
したがって、これを拡張するには、各 'Person' に 'selected、enabled、alive のいずれか' のプロパティがあり、そのプロパティは setter である必要があり、そのプロパティはその子にも存在するように変更されます。このようにして、データの状態は常にデータ モデルに保存され、ADG はたまたまその表現を表示するために使用する現在のビューになります。