C# 来自代码隐藏的Datepicker ValidationRules:未在用户输入时调用验证规则
我正在创建一个包含日期选择器的wpf UserControl。此日期选择器是从c#中的代码隐藏生成的 事实上,当我在DatePicker文本字段中手动输入日期时,验证规则从未被调用(但在使用DatePicker时调用)。我唯一得到的是关于失去焦点的格式异常C# 来自代码隐藏的Datepicker ValidationRules:未在用户输入时调用验证规则,c#,wpf,validation,datepicker,C#,Wpf,Validation,Datepicker,我正在创建一个包含日期选择器的wpf UserControl。此日期选择器是从c#中的代码隐藏生成的 事实上,当我在DatePicker文本字段中手动输入日期时,验证规则从未被调用(但在使用DatePicker时调用)。我唯一得到的是关于失去焦点的格式异常 有什么想法吗?Thanx.一种可能性是使用转换器: public class DateTimeNullConverter : MarkupExtension, IValueConverter { public override obj
有什么想法吗?Thanx.一种可能性是使用转换器:
public class DateTimeNullConverter : MarkupExtension, IValueConverter
{
public override object ProvideValue(IServiceProvider serviceProvider) => this;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is DateTime)
return value.ToString();
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
var text = value as string;
DateTime result;
if (text != null && DateTime.TryParse(text, out result))
return result;
return null;
}
}
您可以这样使用它来绑定到公共日期时间?日期时间
属性:
<TextBox Text="{Binding DateTime, Converter={local:DateTimeNullConverter}}" />
ConvertBack
将在失去焦点时调用。在转换器之后运行验证。您没有指定任何,因此默认行为应用于输入的字符串
转换为日期时间
,如果不可能,则生成格式异常
。如果要自定义(本地化?)格式错误消息或必须提供自定义转换器,可以覆盖绑定异常筛选器。谢谢Sinatr。我尝试添加一个转换器。但它只在加载视图时调用,而不是在我在datepicker的文本框中键入时调用。如果你制定了你想要实现的目标(该规则会做什么),那么我可以尝试一下。请看,可能您遇到了类似的问题。我已尝试将输入值转换为DateTime,如果无法转换,则返回null。我想我的问题是,我设置的转换器只在加载视图时调用,而不是在加载之后调用。您是否绑定到DateTime?
属性DateTime
是一个结构(值类型),它不能接受null
。
<TextBox Text="{Binding DateTime, Converter={local:DateTimeNullConverter}}" />