No Silverlight, pode-se definir valores min / max para um DependencyProperty?
-
05-07-2019 - |
Pergunta
Por exemplo, eu tenho uma propriedade de dependência que muda o ScaleTransform de uma lona, ??mas se ele nunca vai abaixo de zero ele lança um erro. Claro, eu poderia apenas forçá-lo a zero no código se isso nunca acontece, mas eu prefiro usar um método melhor como usar um udouble (sem sinal de casal), que não existe no Silverlight ou mesmo definir os valores min / max em algum lugar no DependencyProperty.
Qual é a melhor abordagem aqui?
Solução
Se você estiver indo para lidar com isso no seu DependencyProperty, eu recomendo manuseá-lo em uma PropertyChangedCallback , o que confirma que o valor está na faixa correta e substitui-lo se não.
Você também pode lidar com isso fora da propriedade de dependência. Por exemplo:
- A conversor de valor
- Fazer cumprir esta no modelo, e ligação a um ViewModel que tem sempre um valor válido. Consulte mais sobre MVVM aqui .
Outras dicas
Só para acrescentar a isso, dentro de sua PropertyChangedCallback, um padrão típico vai ser revert on / incorreta valores fora-de-gama, antes de lançar uma exceção.
Se você não fizer a reversão, o valor out-of-range vai realmente ainda ser definido, e seu estado será inválido.
Você verá exemplos dessa "coercian pobre homem" em alguns dos Silverlight Toolkit. Aqui está o AutoCompleteBox.cs fonte .
O padrão é algo como:
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");
}
Você também pode implementar suas próprias "read-only" propriedades de dependência do Silverlight de forma semelhante, embora ele vai exigir um campo privado para indicar se você está definindo ou reverter o valor.