This is how I handled this for my case (there’s more in this example than you need)
mixedGUI(_target.hasMultipleDifferentValues, () => {
var newVal = drawDropDownSelector(rect, clamp(val, _records.Length), usesTooltips);
if(val != newVal) _target.stringValue = _records[newVal].name;
})
void mixedGUI(bool condition, Action action) {
var saved = EditorGUI.showMixedValue;
EditorGUI.showMixedValue = condition;
action.Invoke();
EditorGUI.showMixedValue = saved;
}
int drawDropDownSelector(Rect rect, int selected, bool usesTooltips)
=> EditorGUI.Popup(rect, GUIContent.none, selected, _cached??= extractGUIContentColumn(usesTooltips));
You can exactly how this works if you grab the code from here . It’s made for enums specifically.