Время привязки в wpf mvvm, и показывают только минуты: секунды? - PullRequest
5 голосов
/ 12 мая 2011

Я хочу иметь возможность устанавливать минуты и секунды в текстовом поле.Теперь я просто привязываю свое текстовое поле к свойству, которое является свойством TimeSpan.Так что теперь в моем текстовом поле по умолчанию: 00: 00: 00.

Это прекрасно работает, но я хочу иметь возможность просто иметь 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" />

1 Ответ

10 голосов
/ 12 мая 2011

Если вы просто хотели одностороннее связывание, вы можете использовать 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);
    }
}
...