2011-05-12 61 views
5

我希望能夠在文本框中設置分鐘和秒鐘。我現在只是將我的文本框綁定到一個屬性,這是一個TimeSpan屬性。所以現在在我的文本框中,默認是:00:00:00。在wpf mvvm中綁定時間跨度,並只顯示分鐘:秒?

這工作正常,但我想只能有00:00。這樣的時間被刪除。

我該怎麼做?我搜索了網絡但找不到任何好的解決方案

謝謝!

這是我的綁定:

public TimeSpan MaxTime 
{ 
    get 
    { 
     if (this.Examination.MaxTime == 0) 
      return TimeSpan.Zero; 
     else 
      return maxTime; 
    } 
    set 
    { 
     maxTime = value; 
     OnPropertyChanged("MaxTime"); 
     TimeSpan x; 
     this.Examination.MaxTime = int.Parse(maxTime.TotalSeconds.ToString());        
    } 
} 
<TextBox Height="23" HorizontalAlignment="Left" Margin="215,84,0,0" Text="{Binding Path=MaxTime,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" VerticalAlignment="Top" Width="50" /> 

回答

9

如果你只是想要一個雙向綁定,那麼你可以使用StringFormat

<TextBlock Text="{Binding MaxTime, StringFormat={}{0:hh\:mm}}" /> 

如果你想雙向綁定,然後我會去自定義值轉換器。

[ValueConversion(typeof(TimeSpan), typeof(String))] 
public class HoursMinutesTimeSpanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
          Globalization.CultureInfo culture) 
    { 
     // TODO something like: 
     return ((TimeSpan)value).ToString("hh\:mm"); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, 
           Globalization.CultureInfo culture) 
    { 
     // TODO something like: 
     return TimeSpan.ParseExact(value, "hh:\mm", CultureInfo.CurrentCulture); 
    } 
} 
+2

轉義格式字符串中的冒號對我無效。我必須將它改爲'{0:hh':'mm}',即:' – sthlm58 2012-11-21 20:02:55

+0

或StringFormat = {} {0:hh \:mm} – 2013-07-16 09:47:03

+0

這只是如何顯示分鐘和秒?我明白'hh'是小時,'mm'是分鐘。 – ProfK 2016-11-25 04:42:58