DIV 模擬下拉(無法超出瀏覽器視窗)或 TextBox+ListBox(佔用版面)。
Text 取值、Items 集合、無 SelectedIndexChanged(依需求可加)。ListItem,無 Value 屬性(僅顯示文字)。ICollection,功能類似 ListItemCollection。ComboItem 實作 IStateManager 以支援 ViewState:
public void TrackViewState() { _IsTrackingViewState = true; }
public bool IsTrackingViewState => _IsTrackingViewState;
public object SaveViewState() => new Pair(_text, _selected);
public void LoadViewState(object state)
{
if (state != null && state is Pair)
{
Pair p = (Pair)state;
_text = (string)p.First;
_selected = (bool)p.Second;
}
}
集合類別 ComboItemCollection 同樣實作 IStateManager,將項目陣列序列化為 object[] 儲存。掌握 IStateManager 四方法(TrackViewState、SaveViewState、LoadViewState、IsTrackingViewState)是開發支援 ViewState 自訂控件的關鍵。