В Silverlight можно определить минимальные / максимальные значения для DependencyProperty? - PullRequest
1 голос
/ 30 июля 2009

Например, у меня есть свойство зависимостей, которое изменяет ScaleTransform для Canvas, но если оно когда-либо падает ниже нуля, оно выдает ошибку.Конечно, я мог бы просто принудительно обнулить его в коде, если это когда-нибудь произойдет, но я бы предпочел использовать лучший метод, такой как использование udouble (unsigned double), которого нет в Silverlight, или даже установку значений min / maxгде-то в DependencyProperty.

Какой лучший подход здесь?

Ответы [ 2 ]

3 голосов
/ 30 июля 2009

Если вы собираетесь обрабатывать это в своем DependencyProperty, я бы рекомендовал обрабатывать его в PropertyChangedCallback , который проверяет, что значение находится в правильном диапазоне, и переопределяет его, если нет.

Вы также можете обрабатывать это вне свойства зависимости. Например:

1 голос
/ 02 августа 2009

Просто добавьте к этому, что внутри вашего 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 «только для чтения», хотя для этого потребуется личное поле, указывающее, устанавливаете ли вы значение или возвращаете его.

...