#1. In general, the associated TypeConverter provides the list of "standard values". For example, the Boolean type uses the BooleanConverter when overrides GetStandardValues and it's associated methods. The PropertyGrid knows to call these methods and the ComboBoxPropertyEditor knows to bind to it's ComboBox this list of items.
Depending on your property and it's Type, you can either specify the TypeConverter on the property itself or the Type definition (i.e. the class). Basically, you'd create a class that derives from TypeConverter and overrides the GetStandardValues, GetStandardValuesExclusive, and GetStandardValuesSupported methods. GetStandardValues returns the list of items you'd like to show in the ComboBox. GetStandardValuesExclusive returns true if the property should be restricted to the standard values (i.e. a Boolean can only be true or false, so it's exclusive). GetStandardValuesSupported should return true, if GetStandardValues is supported. Then you'd use TypeConverterAttribute and decorate your property or type with your custom TypeConverter (i.e. "[TypeConverter(typeof(MyTypeConverter))]").
This forum post
shows an example of a custom TypeConverter.
Alternatively, you could build a custom property editor that uses a ComboBox bound to a custom list. We have several examples of how to define a custom property editor in our Sample Browser, but the process is pretty simple. You'd create a DataTemplate that includes the controls you'd like to use (i.e. a ComboBox) and include it in your application resources with a known key name (i.e. x:Key="MyComboBoxEditor"). You could then bind the ComboBox.ItemsSource to anything you wanted.
Then you'd need to associated that property editor with your property. This post
shows one example, but our Sample Browser has several other samples as well.
If you want to subscribe to the SelectionChanged event, you'd have to attach a class handler for the ComboBox.SelectionChangedEvent to the PropertyGrid type and look for events from a ComboBox. Normally, you don't need to subscribe to this event, as the ComboBoxPropertyEditor uses a binding to push the selected value back to the underlying property.
#2. There are samples of this in our Sample Browser in the Property Editors QuickStart under the PropertyGrid section.