当前位置: 首页 > 编程语言 > C#

强制依赖属性需要什么?共享

时间:2023-04-10 17:54:48 C#

强制依赖属性需要什么?我看到了一个具有2个依赖属性的示例:publicstaticreadonlyDependencyPropertyCurrentReadingProperty=DependencyProperty.Register("CurrentReading",typeof(double),typeof(Gauge),newFrameworkPropertyMetadata(Double.NaN,FrameworkPropertyMetadataOptions.None,newProperty(ChangedCallOnCurrentReadingChanged),newCoerceValueCallback(CoerceCurrentReading)),newValidateValueCallback(IsValidReading));和publicstaticreadonlyDependencyPropertyMinReadingProperty=DependencyProperty.Register("MinReading",typeof(double),typeof(Gauge),newFrameworkPropertyMetadata(double.NaN,FrameworkPropertyMetadataOptions.None,newPropertyChangedCallback(OnMinReadingChanged),newCoerceValueCallback(CoerceMinReading)),newValidateValueCallback(IsValidReading));在OnCurrentReadingChanged中,我执行以下操作d.CoerceValue(MinReadingProperty);它调用具有代码的CoerceValueCallback委托(“CoerceMinReading”):privatestaticobjectCoerceMinReading(DependencyObjectd,对象值){Gaugeg=(Gauge)d;双最小值=(双)值;//一些必要的条件;返回分钟;我想理解的是,为什么我需要强制?为什么我不能在我的属性更改回调中调用SetValue并更改所需的属性,而不是调用CoerceValue并在我的转换回调中处理事情?Coercion旨在(可选)确保值在UI层可以做出此类决定的情况下有效。一个典型的例子是某种滑块控件,其中绑定属性试图设置滑块指定范围之外的值。在这种情况下,可以将该值“限制”为其最小值或最大值,而不是抛出ValidationException。在SetValue属性更改期间调用SetValue效率不高,因为您可能会用递归事件淹没系统。这就是强制存在的原因。请记住它的局限性并在适当的地方使用它。在这种情况下,它是合适的。以上是C#学习教程:Whatisrequiredtoenforcedependencyproperties?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: