2010-10-30 9 views
1

J'utilise ensemble les outils Silverlight DatePicker et TimePicker de la boîte à outils pour permettre à un utilisateur de sélectionner une date et une heure. Ils sont liés à la même valeur DateTime sur un objet métier derrière les scences. Cela fonctionne principalement bien, sauf lorsque le composant de date est modifié, le composant de temps est effacé. C'est un peu logique mais probablement pas le comportement voulu par l'utilisateur.Utilisation de Silverlight Datepicker et Timepicker ensemble

Il y a deux façons je pourrais pirater mon chemin autour de cette:

  • Stocker les composants date et l'heure dans différentes valeurs (pas hacky mais un peu anonying que je vais stocker la valeur résultante comme un champ dans un db)
  • Essayez et fixer le composant de temps lorsque l'événement se déclenche SelectedDateChanged (ce qui ne semble une solution très hacky)

je voudrais être en mesure de dire le contrôle DatePicker: laissez juste le composant de temps quand vous changez la date. Est-ce que j'espère trop?

Répondre

7

Je pense, vous pouvez dire DatePicker "Laissez simplement le composant de temps lorsque vous changez la date" en utilisant convertisseur :). Lorsque vous liez DateTime au convertisseur DatePicker stocke la valeur et sur ConvertBack renvoie sans modifications dans la partie Heure.

public class DateConverter : IValueConverter 
{ 
    private DateTime _original; 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     _original = (DateTime)value; 
     return value; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     DateTime date = ((DateTime) value); 
     return new DateTime(date.Year, date.Month, date.Day, _original.Hour, _original.Minute, _original.Second); 
    } 
} 

XAML:

<sdk:DatePicker SelectedDate="{Binding Date, Mode=TwoWay, 
       Converter={StaticResource dateConverter}}" /> 

<input:TimePicker Value="{Binding Date, Mode=TwoWay}"/> 
+0

Merci, je peux finir les envelopper dans un contrôle DateTimePicker comme il y a plusieurs endroits où je les utiliser ensemble. Ce contrôle utiliserait probablement le convertisseur que vous suggérez. – Robert

+0

Comment implémenter ce {StaticResource dateConverter}}? S'il vous plaît mettez du code. Je vous remercie! et +1 –

Questions connexes