2014-04-19 13 views
1

我試圖將JSON訂閱源綁定到類以在XAML工作表中顯示。所有這些工作。但是,我遇到的一個問題是將DateTime值(以字符串形式輸入)轉換爲不同的格式。轉換數據綁定類中的DateTime字符串

例如,JSON將其提供爲:「2014-04-20T02:57:00Z」。我想將其轉換爲"HH:mm"格式。

public String ArrivalTime 
{ 
    get 
    { 

     DateTime dt = DateTime.Parse(ArrivalTime); 
     string test = String.Format("{HH:mm}", dt); 
     return test; 
    } 
    set 
    { 

    } 
} 

我不是太熟悉的存取和我敢肯定我做錯了,但在正確的軌道上,我希望?我將如何動態地將傳入的DateTime字符串轉換爲新的DateTime格式的字符串?

在此先感謝!

+1

你怎麼會有DateTime類轉換成1397949540000某種有效的日期和時間? –

+0

對不起,非常有用的一點。應該是「2014-04-20T02:57:00Z」 – ForeverLearning

回答

1

「WPF」的方式是讓視圖轉換它。您可以使用IValueConverter界面將數據轉換爲您想要顯示的數據。

你需要把你的邏輯放在什麼數字到目前爲止的時間應該是。這是我的猜測。我不知道你怎樣才能將時間轉換回來,而不是整個日期。此外,MarkupExtension不是必需的,它只是一個很好的選擇。有關更多信息,請參閱http://wpftutorial.net/ValueConverters.html

public class JSONDateToDate : MarkupExtension, IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var jSONDate = parameter as string; 
     if (!string.IsNullOrEmpty(jSONDate)) 
     { 
      DateTime dt; 
      if DateTime.TryParse(jSONDate, out dt) 
      { 
       return dt; 
      } 
     } 
     // If didn't pass in string or TryParse failed return back empty datetime 
     return new DateTime(); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    // Not needed just nice 
    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return this; 
    } 
} 

在XAML中你可以使用它像

<TextBox Name="tbxArrivalTime" Text="{Binding Path=ArrivalTime, StringFormat=" \{0:HH:mm\}". Converter={x:JSONDateToDate } /> 

只是一個警告的話我沒有測試所有這些代碼,並可能在XAML中的一些小問題,因爲它很難類型沒有實際的佈線。

根據獲取日期字符串而不是數字更新我的答案。您可以在IValueConverter中返回格式化的字符串,也可以返回日期時間。如果您返回日期時間,則使用stringformat將該值格式化爲字符串。如果你有確切的格式很多地方,我會把它放在價值轉換器,否則我會讓我的價值轉換器只是返回一個日期時間,因爲我可能會得到更多的重用。

+0

謝謝!是的,我選擇這樣做,它效果更好!沒想到要使用Converter ...謝謝! – ForeverLearning

0

如果你的數據應該是一個日期/時間,你應該確保它是。只需添加另一個步驟,以您的飼料的反序列化來糾正它,那麼它只是一個演示問題:

<TextBox Name="tbxArrivalTime" Text="{Binding Path=ArrivalTime, Format=\{0:HH:mm\}}" /> 
+0

他的日期時間實際上是一個字符串類型。他仍然需要一個valueconverter來將其從一個字符串切換到日期時間。 – CharlesNRice

+0

對不起。我的錯。我已經爲答案添加了說明。 –