例如,我有一个依赖性的变化将来的画布,但如果它曾经低于零它抛出一个错误。当然,我可以强制到零的代码如果没有发生过,但是我宁愿用更好的方法,如使用一个udouble(未签署的双),其中不存在Silverlight或甚至设置的最低/最高价值观的地方,在DependencyProperty.

什么是最好的办法在这里?

有帮助吗?

解决方案

如果你要处理这个在你的DependencyProperty,我建议处理其中的一个 PropertyChangedCallback, ,这证明的价值是在正确的范围和复盖它如果没有。

你也可以处理这一外部的依赖性。例如:

其他提示

只是为了补充一点,在你的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依赖属性以类似的方式,但它需要一个私有字段来指示您是在设置还是还原该值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top