Пользовательский элемент управления WPF для отображения лет и месяцев из общего значения месяцев - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть значение в базе данных, которое представляет собой общее количество месяцев.В моем интерфейсе WPF мне нужно отобразить и обновить это значение в виде количества лет и месяцев.Я изо всех сил пытаюсь заставить привязки работать в этом элементе управления, чтобы я мог просматривать и обновлять это одно значение общего количества месяцев, используя два отдельных текстовых поля (годы и месяцы)

Может ли кто-нибудь помочь с этим?

Ответы [ 2 ]

0 голосов
/ 08 декабря 2010

Полагаю, вам следует использовать конвертер для преобразования значения месяца в соответствующие значения года и месяца. Или вы можете сделать это в самой модели представления

Пример

    public class MonthConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
       if(((string)parameter)=="Year")
       {
           return (int)value / 12;
       }
       if (((string)parameter) == "Month")
       {
           return (int)value % 12;
       }
       return null;
    }

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

    #endregion
}

и в вашем xaml

<StackPanel Orientation="Horizontal">
        <TextBlock Height="23" Text="{Binding TotalMonths,Converter={StaticResource MonthConverter},ConverterParameter='Year',StringFormat={}{0}Years}"/>
        <TextBlock Height="23" Text="{Binding TotalMonths,Converter={StaticResource MonthConverter},ConverterParameter='Month',StringFormat={}{0}Months}"/>
    </StackPanel>
0 голосов
/ 08 декабря 2010

В классе, который является источником ваших привязок (например, ViewModel), вы можете добавить два свойства, которые вычисляют два значения при необходимости. Например:

private const int MonthsInAYear = 12; // pedagogic purposes only :)  

// This field contains the updated database value
private int _timeInMonths; 

public int TimeYears
{
    get { return _timeInMonths / MonthsInAYear; }
}
public int TimeMonths
{
    get { return _timeInMonths % MonthsInAYear; }
}

Если вы хотите, чтобы эти значения автоматически обновлялись, заставьте этот класс реализовать интерфейс INotifyPropertyChanged и вызывать событие PropertyChanged для обоих свойств при каждом изменении значения _timeInMonths.

...