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?

Foi útil?

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:

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top