Я знаю, что это было время для этого поста, но, возможно, это поможет кому-то в будущем, кто столкнется с той же проблемой. Я боролся с этим несколько дней, но в конце концов понял это.
если для CauseViolation задано значение false, проблема не решается, и привязка данных перестает работать.
Когда вы возражаете против SelectedItem для свойства, как это
combobox.DataBindings.Add("SelectedItem", someObject, "MySelectedItemProperty", false, DataSourceUpdateMode.OnPropertyChanged)
combobox вызывает метод Equals для объекта, который вы используете в списке, назначенном вашему DataSource. В моем случае мне нужно было переписать метод Equals в этом объекте. По какой-то глупой причине combobox вызывает этот метод и передает System.DBNull перед фактической передачей нужного типа объекта для сравнения. В этом случае в моем случае произошло нарушение, из-за которого нарушение не сработало, поэтому курсор не освобождается из выпадающего списка. Также странным было то, что программа не остановилась, когда в моем методе Equals было вызвано Exception.
Как только я добавил этот код
if (obj.GetType() != this.GetType())
return false;
по моему методу Equals все работало нормально. Надеюсь, это кому-нибудь поможет.