Просто добавьте к этому, что внутри вашего PropertyChangedCallback типичный шаблон будет возвращаться к неправильным / вне диапазона значениям, прежде чем выдать исключение.
Если вы не выполните возврат, значение вне диапазона будет фактически установлено, и ваше состояние будет недействительным.
Вы увидите примеры этого "коэрциана бедняка" в некоторых из набора инструментов Silverlight. Вот источник AutoCompleteBox.cs .
Шаблон выглядит примерно так:
int newValue = (int)e.NewValue;
if (newValue < 0)
{
source._ignorePropertyChange = true;
d.SetValue(e.Property, e.OldValue);
throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, Properties.Resources.AutoComplete_OnMinimumPopulateDelayPropertyChanged_InvalidValue, newValue), "value");
}
Аналогичным образом вы можете реализовать свои собственные свойства зависимости Silverlight «только для чтения», хотя для этого потребуется личное поле, указывающее, устанавливаете ли вы значение или возвращаете его.