C# 强制依赖项属性的需要是什么?
我看到了一个示例,其中有两个依赖项属性:C# 强制依赖项属性的需要是什么?,c#,wpf,dependency-properties,C#,Wpf,Dependency Properties,我看到了一个示例,其中有两个依赖项属性: public static readonly DependencyProperty CurrentReadingProperty = DependencyProperty.Register("CurrentReading", typeof(double), typeof(Gauge), new FrameworkPropertyMetadata(Double.NaN, FrameworkProper
public static readonly DependencyProperty CurrentReadingProperty =
DependencyProperty.Register("CurrentReading",
typeof(double),
typeof(Gauge),
new FrameworkPropertyMetadata(Double.NaN,
FrameworkPropertyMetadataOptions.None,
new PropertyChangedCallback(OnCurrentReadingChanged),
new CoerceValueCallback(CoerceCurrentReading)
),
new ValidateValueCallback(IsValidReading)
);
及
在OnCurrentradingChanged中,我执行以下操作
d.胁迫值(MinReadingProperty)代码>
调用具有以下代码的强制ValueCallback委托(“强制读取”):
private static object CoerceMinReading(DependencyObject d, object value)
{
Gauge g = (Gauge)d;
double min = (double)value;
// some required conditions;
return min;
}
我想了解的是,为什么我需要执行强制
为什么我不能在我的属性更改回调中调用SetValue并更改所需的属性,而不是在强制回调中调用强制值并处理事情?强制旨在(可选地)确保值在UI层可以做出此类决定的情况下有效。一个典型的例子是某种类型的滑块控件,其中绑定属性试图将值设置为超出滑块的指定范围。在这种情况下,可以将值“钳制”为最小值或最大值,而不是抛出验证异常
在SetValue属性更改期间调用SetValue是无效的,因为您可能会用递归事件淹没系统。这就是强制存在的原因。记住它的局限性,并在适当的地方使用它。在这种情况下,这是合适的。您不应该这样做。也不清楚为什么你认为你确实需要这样做……在这种情况下,这是适当的——但在OnCurrentradingChanged中,这不值得强调。@Henkholtman,你能解释一下吗。从表面上看,该案例与示例和
private static object CoerceMinReading(DependencyObject d, object value)
{
Gauge g = (Gauge)d;
double min = (double)value;
// some required conditions;
return min;
}