c# - 随机化仍然允许验证的文本框文本的方法?
问题描述
我有一个 WPF 窗口,其中包含一些ComboBox
控件TextBox
。我在初始化时填充组合框,并且文本框对我的视图模型中的某些属性具有双向绑定。
我的想法是在单击按钮时随机化组合框的选定索引和窗口代码隐藏中文本框中的文本,只是为了查看我的实现和验证逻辑是否合理,但是使用这种方法非常乏味而且容易出错,反复将焦点设置到每个文本框以触发其验证。文本框包含 的值double
,因此 usingUpdateSourceTrigger="PropertyChanged"
不允许手动输入小数点符号(点或逗号或你有什么),我觉得应该支持这两种输入法。
示例xaml
代码:
<TextBox x:Name="DataValueBox" Grid.Row="3" Grid.Column="3" Height="auto" VerticalAlignment="Center" Margin="10 0">
<TextBox.Text>
<Binding ElementName="DataComboBox"
Path="SelectedItem.Value"
Mode="TwoWay"
ValidatesOnExceptions="True"
NotifyOnValidationError="True"
UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<validators:DoubleRule />
</Binding.ValidationRules>
<Binding.Converter>
<converters:StringToDoubleConverter />
</Binding.Converter>
</Binding>
</TextBox.Text>
</TextBox>
字符串到双倍转换器(在验证后发生):
public class StringToDoubleConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
=> value.ToString();
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
=> double.Parse(value.ToString(), NumberStyles.Float, CultureInfo.CurrentCulture);
}
字符串验证(检查字符串是否代表double
当前文化中的 a):
public class DoubleRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
string valueString = value.ToString();
NumberStyles style = NumberStyles.Float;
CultureInfo culture = CultureInfo.CurrentCulture;
double _ = 0.0;
// Initial parse attempt
bool parsed = double.TryParse(valueString, style, culture, out _);
return parsed ? ValidationResult.ValidResult : new ValidationResult(false, "Please input a valid decimal number.");
}
}
当我从代码隐藏更改文本时,有没有办法触发文本框的验证序列,或者有没有更好的方法来提供将触发验证的随机数据?
解决方案
由于您已经在代码隐藏中设置Text
了元素的属性,因此TextBox
您也可以显式更新源代码:
textBox.Text = "some random value...";
var be = textBox.GetBindingExpression(TextBox.TextProperty);
if (be != null)
be.UpdateSource();
这将导致验证规则触发。
推荐阅读
- javascript - Jquery Ajax 请求需要鼠标移动来更新屏幕?
- c++ - 使用带有 CppCMS 的表单上的多个按钮使用 POST
- javascript - 如何使 JavaScript ajax 异步调用看起来是同步的?
- swift - Cocoa - 使用来自另一个视图控制器的按钮更改选项卡视图
- c# - 当 3 != 3 在 c# Visual Studio 中
- excel - Excel以不同的方式四舍五入相同的数字
- woocommerce - 当 WooCommerce 中的库存不足时更改库存消息
- symfony4 - 在 API 平台上返回自定义 JSON 的最佳实践
- sql - SQL JOIN 和 UNION
- django - 如何重新排序 Django-Graphene 子查询?