难看的解决方案
我创建了自己的MyComboBox,它从System.Windows.Controls.ComboBox.中继承了MyComboBox i重写了ItemsSourceProperty的元数据,因此只要更改了public partial class MyComboBox : ComboBox
{
static MyComboBox()
{
ItemsSourceProperty.OverrideMetadata(typeof(MyComboBox),
new FrameworkPropertyMetadata((IEnumerable)null, new PropertyChangedCallback(OnItemsSourceChanged)));
}
private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
ItemsControl ic = (ItemsControl)d;
IEnumerable oldValue = (IEnumerable)e.OldValue;
IEnumerable newValue = (IEnumerable)e.NewValue;
// We get into infinite recursion land without the following condition:
if (newValue.GetType() == typeof(Dictionary))
{
var cvs = new CollectionViewSource() { Source = ((Dictio