【发布时间】:2018-03-13 04:29:58
【问题描述】:
我是 .net 开发的新手,所以请在这里帮助我。
我正在尝试通过 xaml 数据绑定将值从 c# 类传递给验证规则。
C#类:
public class NumericDoubleUpDownValueContainerVM : SimpleValueContainerVM<string>
{
public NumericDoubleUpDownValueContainerVM(double value, double minValue, double maxValue, int decimalPlace) : base(value.ToString())
{
this.MinimumValue = minValue;
this.MaximumValue = maxValue;
this.DecimalPlaces = decimalPlace;
}
public double MinimumValue { get; set; }
public double MaximumValue { get; set; }
public int DecimalPlaces { get; set; }
public override void UpdatePropertyValue(object value, string propertyName = "")
{
this.Value = Convert.ToString(value);
}
}
这里的SimpleValueContainerVM<T> 是一个通用类,用于从相应的 UI 元素中获取和设置值。
Xaml 代码:
<DataTemplate DataType="{x:Type VM:NumericDoubleUpDownValueContainerVM}" >
<Grid x:Name="Maingrid" >
<WPFStyles.CustomControls:NumericUpDown Minimum="{Binding MinimumValue}" Maximum="{Binding MaximumValue}" x:Name="Value" Width="{Binding ActualWidth, ElementName=Maingrid}"
VerticalAlignment="Center" YIncrementValue="0.1" DecimalPlaces ="{Binding DecimalPlaces}"
ToolTip="{Binding ValueToolTip, Converter={x:Static utils:StringToLocalizedStringConverter.Instance}, ConverterParameter=ToolTip}">
<Binding Path="Value" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" ValidatesOnDataErrors="True">
<Binding.ValidationRules>
<validationRule:DoubleValidationRule/>
<validationRule:ValueWithinLimitsRule ValidatesOnTargetUpdated="True" ValidationStep="RawProposedValue" />
</Binding.ValidationRules>
</Binding>
</WPFStyles.CustomControls:NumericUpDown>
</Grid>
</DataTemplate>
这里的 ValueWithinLimits 规则是正在使用的规则:
验证规则如下:
public class ValueWithinLimitsRule : ValidationRule
{
public double MaxVal { get; set; }
public double MinVal { get; set; }
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if (value != null)
{
if (Convert.ToDouble(value.ToString()) > this.MaxVal || Convert.ToDouble(value.ToString()) < this.MinVal)
{
return new ValidationResult(false, null);
}
else
{
return new ValidationResult(true, null);
}
}
return new ValidationResult(false, null);
}
}
我尝试了类似的东西
<validationRule:ValueWithinLimitsRule ValidatesOnTargetUpdated="True" ValidationStep="RawProposedValue" MinVal="0" MaxVal="100"/>
而且效果很好。
现在我想使用NumericDoubleUpDownValueContainerVM的属性
MinimumValue and MaximumValue
代替 0 和 100。
我尝试使用谷歌搜索并了解依赖属性和对象,但无法掌握它。
非常感谢任何帮助。
【问题讨论】:
-
有一个很好的解释你想要什么stackoverflow.com/questions/3862385/…