Это может не помочь ситуации, и, вероятно, это неправильный способ сделать это, однако вы говорили о событии OnPropertyChanging
для ваших свойств зависимостей.
Так получилось, что при создании свойств зависимостей вы можете указать обратный вызов в PropertyMetadata
, который срабатывает при изменении свойства, которое имеет как старое, так и новое значения в EventArgument
.
Вот пример свойства Text с обратным вызовом
public static DependencyProperty TextProperty = DependencyProperty.Register
("Text", typeof(string),
typeof(DecimalTextBox),
new PropertyMetadata("", OnTextPropertyChanged));
Последний параметр - это тот, который вы ищете.Первый параметр конструктора PropertyMetadata является значением по умолчанию для свойства.Во втором случае вы регистрируете обратный вызов с измененным свойством, который происходит при изменении свойства.
В этом обратном вызове вы можете обрабатывать привязки, чтобы убедиться, что вы не перезаписываете SelectedItem вашего datacontext.
Если честно, я не уверен, как это поможет вам в вашей ситуации, так как я все равно не знаю, как проверить, является ли значение NULL действительным или нет.(то, что я мог бы сделать, это не разрешать нулевые значения, если существует ItemSource, если только источник не изменяется [и я мог бы использовать какой-либо флаг в обратном вызове измененного ItemSource, который сбрасывается после изменения выбранного элемента]).Я не очень разбираюсь в асинхронности, но вы могли бы поставить здесь какую-то блокировку.
u_u