wpf mvvm datepicker文本框自动格式

时间:2013-08-19 23:13:30

标签: wpf c#-4.0 mvvm

是否可以在日期选择器的文本框中自动设置用户输入日期?

我有以下代码

<Style TargetType="{x:Type DatePicker}">
    <Setter Property="Foreground" Value="{DynamicResource TextBrush}"/>
    <Setter Property="IsTodayHighlighted" Value="True"/>
    <Setter Property="SelectedDateFormat" Value="Short"/>
    <Setter Property="Padding" Value="2"/>
    <Setter Property="CalendarStyle" Value="{DynamicResource DatePickerCalendarStyle}" />
</Style>

<Style TargetType="{x:Type DatePickerTextBox}">
    <Setter Property="Foreground" Value="{DynamicResource TextBrush}"/>
    <Setter Property="Padding" Value="2"/>
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate>
                <TextBox x:Name="PART_TextBox"
 Text="{Binding Path=SelectedDate, StringFormat='dd/MM/yyyy', 
 RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

在我看来,我有

<DatePicker Height="25" HorizontalAlignment="Left" Margin="518,34,0,0" Name="DateThru" VerticalAlignment="Top" Width="115" SelectedDate="{Binding DateThruSelected, Mode=TwoWay}" IsEnabled="{Binding DateThruIsEnabled}" >
</DatePicker>

所以有两个问题。 第一 当我进入文本框“030613”或“03062013”​​并点击时我希望它自动格式化为“03/06/2013”​​在datpicker的文本框中。

第二,我期待SelectedDate属性设置为“03/06/2013”​​。 (如果我从嵌入式日历中选择日期,则SelectedDate绑定可以正常工作。)

我目前发布的代码中没有两个都没有。 知道如何实现这两个目标吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

关于第一期:

正念我想到了。为了便于使用,请尝试使用一些抽象类,并派生它,如:

public abstract class DateTimeRegexPattern
{
    public abstract DateTime DateTime { get; }

    public abstract bool IsMatch(string input);
}

对于您希望识别的每个模式,您派生该抽象类(可以增强),并将它们放在列表中。每当文本框的内容发生变化时,为了检测可以应用哪种模式,请使用LINQ。

List<DateTimeRegexPattern> patterns = new List<DateTimeRegexPattern>();
// Fill the list with one instance of each of derived classes of DateTimeRegexPattern
DateTimeRegexPattern matching = patterns.FirstOrDefault(x => x.IsMatch("030613"));

然后,检索DateTime,如果有任何模式匹配,并将其应用于DatePicker,如果当前日期不同。

关于第二个问题: http://msdn.microsoft.com/fr-fr/library/system.windows.controls.datepicker.selecteddatechanged.aspx此事件可以解决问题。当日期更改时,如果日期不同,请更改文本框的内容