2013-08-19 77 views
0

是否可以自動格式化日期選擇器的文本框中的用戶輸入日期?wpf mvvm datepicker文本框自動格式

我有以下代碼

<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」​​。

第二我期待SelectedDate屬性設置爲「03/06/2013」​​。 (如果我從嵌入式日曆中選擇一個日期,SelectedDate綁定可以正常工作)。

我在這裏發佈的當前代碼沒有這兩者。 任何想法如何實現這兩個目標?

在此先感謝!

回答

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")); 

然後,檢索日期時間,如果有匹配模式,並將其應用到的DatePicker,如果當前日期是不同的。

關於第二個問題: http://msdn.microsoft.com/fr-fr/library/system.windows.controls.datepicker.selecteddatechanged.aspx此事件應該做的伎倆。日期改變時,如果日期不同,請更改文本框的內容

+0

嗨,大衛,謝謝你的回覆。當我嘗試在文本框中格式化輸入日期時,我無法訪問DatePicker中嵌入的DatePickerTextBox。所以我的頭號問題變成了如何訪問DatePicker中嵌入的DatePickerTextBox。 – Shawn

+0

由於你有兩個類的實例,必須有一些地方(共同的父母),他們都看到他們。從那裏進行初始化? –

+0

我通過從事件處理程序中的routedeventargs中獲取texbox解決了這個問題。謝謝您的幫助。 – Shawn