我在WPF中实现了一个自定义日期转换器,这个想法更加巧妙地约会日期条目,一个Outlook(能够输入“今天”等)所以我写了我自己的转换器,这是工作。它以M/d/yy格式格式化用户的输入。例如,如果他们输入:8-2,他们会看到8/2/09。可爱。强制转换为在WPF中使用自定义转换器时始终运行?
问题是:用户可以输入的最终结果是相同的日期。 (8-2和8/2,简单的例子)。所以我们只是说他们首先输入8/2,然后运行ConvertBack和Convert,并显示为8/2/09。到现在为止还挺好。现在我们假设他们在同一个领域中输入8-2(或者8/2),之后。虽然通过ConvertBack运行,这会产生绑定属性中已存在的SAME日期,所以不需要运行Convert,这意味着“8/2”位于文本框中。益!没有数据问题,只是一个显示,但嘿,整洁计数。
如何强制WPF在ALL(非错误)条目后运行转换?
这里的转换器的简化版本:
public class DateConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
string tempStr = value.ToString();
return ((DateTime.Parse(tempStr)).ToString("M/d/yy"));
}
else
{
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return DateTime.Parse(value.ToString());
}
#endregion
}
和这里的有什么用的,它看起来像:
<local:FilteredTextBox.Text>
<Binding Path="Value" ElementName="root" Converter="{StaticResource DateConv}"
UpdateSourceTrigger="LostFocus" Mode="TwoWay" diagnostics:PresentationTraceSources.TraceLevel="High"
NotifyOnValidationError="True" ValidatesOnDataErrors="True" ValidatesOnExceptions="True">
<Binding.ValidationRules>
<local:DateValidation/>
</Binding.ValidationRules>
</Binding>
</local:FilteredTextBox.Text>
谢谢! 斯科特
在回答下面的注释,这里的后盾属性:
public DateTime? Value
{
get
{
return (DateTime?)GetValue(ValueProperty);
}
set
{
SetValue(ValueProperty, value);
OnPropertyChanged(new DependencyPropertyChangedEventArgs(ValueProperty, null, value)); // I just added this line, it makes no difference
}
}
在这种情况下,支持数据属性始终使用SetValue设置DependencyProperty的值(这用于自定义控件中)。我添加了上面的代码。而且为了确保,我也打电话给OnPropertyChanged - 没有任何改变!老鼠! – 2009-04-23 23:56:34