こんな感じでいかがでしょうか。
Code:
{def dl = {DropdownList}}
{def radio-frame-change-data-model =
{RadioFrame
{HBox
{RadioButton
label = "0から10",radio-value = "0-10"
},
{RadioButton
label = "20から30",radio-value = "20-30"
}
}
,
||ラジオボタンの値変更時に、DropdownList.data-modelを変更
{on ValueChanged at rf:RadioFrame do
||ラジオボタンの値が変更されたタイミングで、
||リストの内容を変更する
def dm = dl.data-model
{dm.clear}
{switch rf.value
case "0-10" do
{for i:int = 0 to 10 do
{dm.append i}
}
case "20-30" do
{for i:int = 20 to 30 do
{dm.append i}
}
}
}
}
}
{VBox radio-frame-change-data-model, dl }
{do
||ラジオボタンの値を変更して
||ドロップダウンリストのリストを変更する
||※ set dl.value = ** ではイベントが発生しないことに注意
{radio-frame-change-data-model.set-value-with-events "0-10"}
}
ちなみに、リスト表示時にリストをリフレッシュするには、UIクラスを継承したクラスを作成する必要がありそうです。
Code:
||リスト表示時にリストの内容をリフレッシュするUI
{define-class public CustomDropdownListUI {inherits SkinnableDropdownListUI}
field radio-frame:#RadioFrame
{constructor public {default
radio-frame:#RadioFrame = null,
...}
{construct-super {splice ...}}
set self.radio-frame = radio-frame
}
||リストの表示時に、リストの内容を変更する
{method public {show-dropdown}:void
{self.change-lsit-by-radio-value}
{super.show-dropdown}
}
||リストの内容を変更する
{method {change-lsit-by-radio-value}:void
{if-non-null self.radio-frame then
def dm = (self.control asa DropdownList).data-model
{dm.clear}
{switch self.radio-frame.value
case "0-10" do
{for i:int = 0 to 10 do
{dm.append i}
}
case "20-30" do
{for i:int = 20 to 30 do
{dm.append i}
}
}
}
}
}
{def cdl = {DropdownList ui-object = {CustomDropdownListUI radio-frame = radio-frame-change-data-model}}}
{VBox radio-frame-change-data-model, cdl}