Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自代码隐藏的Datepicker ValidationRules:未在用户输入时调用验证规则_C#_Wpf_Validation_Datepicker - Fatal编程技术网

C# 来自代码隐藏的Datepicker ValidationRules:未在用户输入时调用验证规则

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

我正在创建一个包含日期选择器的wpf UserControl。此日期选择器是从c#中的代码隐藏生成的

事实上,当我在DatePicker文本字段中手动输入日期时,验证规则从未被调用(但在使用DatePicker时调用)。我唯一得到的是关于失去焦点的格式异常


有什么想法吗?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}}" />