2010-12-08 20 views
0

J'ai une valeur dans une base de données représentant le nombre total de mois. Dans mon interface utilisateur WPF, je dois afficher et mettre à jour cette valeur comme le nombre d'années et le nombre de mois. J'ai du mal à faire fonctionner les liens dans ce contrôle afin que je puisse voir et mettre à jour cette valeur du mois en utilisant les deux zones de texte séparées (années et mois)Contrôle utilisateur WPF pour afficher les années et les mois à partir d'une valeur totale des mois

Quelqu'un peut-il vous aider?

+0

Vous avez besoin d'une liaison bidirectionnelle, non? –

Répondre

0

Dans la classe qui est la source de vos liaisons (par exemple, un ViewModel), vous pouvez ajouter deux propriétés qui calculent les deux valeurs chaque fois que nécessaire. Par exemple:

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; } 
} 

Si vous voulez que ces valeurs soient automatiquement mises à jour, faire cette classe implémenter l'interface INotifyPropertyChanged et Déclenchez l'événement PropertyChanged pour les deux propriétés à chaque fois que la valeur des _timeInMonths changements.

0

Je suppose que vous devez utiliser un convertisseur pour convertir votre valeur de mois à l'année correspondante et mois values.Or vous pouvez le faire dans votre viewmodel se

Exemple

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 
} 

et dans votre 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>