我有一个表单,用户可以在其中设置数值过程的参数。每个参数对象都有一个默认值。
public double DefaultValue { get => _defaultValue; set { _defaultValue = value; OnPropertyChanged("DefaultValue"); } }
尽管该属性是双精度的,但它可能表示布尔值或整数。对于大多数参数,不需要验证,但我有两个参数,Min和Max,它们是有限的。我不能让Min>;Max或Max<;Min.我已经在XAML中实现了验证,如果数据无效,它会向用户发出视觉警告。Min参数的数据模板如下所示。
<DataTemplate x:Key="MinParameterDataTemplateThin"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="120"/> </Grid.ColumnDefinitions> <TextBlock Text="{Binding DisplayName, StringFormat='{}{0}:'}" Grid.Column="0" Margin="10,5,5,10" VerticalAlignment="Top" TextWrapping="Wrap" Visibility="{Binding Visibility}" ToolTipService.ShowDuration="20000"> <TextBlock.ToolTip> <ToolTip DataContext="{Binding Path=PlacementTarget.DataContext, RelativeSource={x:Static RelativeSource.Self}}"> <TextBlock Text="{Binding Description}"/> </ToolTip> </TextBlock.ToolTip> </TextBlock> <Grid Grid.Column="1"> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <StackPanel Grid.Row="0" Orientation="Horizontal"> <TextBox Name ="MinTextBox" Margin="5" Width="50" VerticalAlignment="Top" Visibility="{Binding Visibility}" IsEnabled="{Binding IsEnabled}"> <TextBox.Resources> <validations:BindingProxy x:Key="proxy" Data="{Binding}"/> </TextBox.Resources> <TextBox.Text> <Binding Path="DefaultValue" StringFormat="N2" Mode="TwoWay" UpdateSourceTrigger="LostFocus" ValidatesOnExceptions="True" NotifyOnValidationError="True" ValidatesOnNotifyDataErrors="True"> <Binding.ValidationRules> <validations:MaximumValueValidation ValidatesOnTargetUpdated="True"> <validations:MaximumValueValidation.MaxValueWrapper> <validations:MaxValueWrapper MaxValue="{Binding Data.MaxValue, Source={StaticResource proxy}}"/> </validations:MaximumValueValidation.MaxValueWrapper> </validations:MaximumValueValidation> </Binding.ValidationRules> </Binding> </TextBox.Text> </TextBox> <TextBlock Text="{Binding UnitSymbol}" Margin="5" VerticalAlignment="Top" Visibility="{Binding Visibility}"/> </StackPanel> <Label Name="ValidationLabel" Content="{Binding ElementName=MinTextBox, Path=(Validation.Errors)[0].ErrorContent}" Foreground="Red" Grid.Row="1" VerticalAlignment="Top"/> </Grid> </Grid> </DataTemplate>
Max参数有一个类似的模板。除了视觉警告,我还需要防止用户保存数据。我希望在参数对象中有一个布尔IsValid属性,以便在用户尝试保存时进行测试。如何从XAML绑定到此IsValid属性?