2013-10-01 18 views
7

che sto cercando di utilizzare il nuovo DateTimePicker per Windows 8.1:DateTimePicker questioni vincolanti

<DatePicker HorizontalAlignment="Left" Margin="401,245,0,0" Grid.Row="1" 
VerticalAlignment="Top" Width="352" Date="{Binding personSingle.personDOB,Mode=TwoWay}"/> 

Quando mai a cambiare la data non ottengo il valore che ho scelto quando guardo rapporto qualità-personDOB. personDOB è di tipo DateTimeOffset

Cosa devo fare per ottenere il valore che scelgo?

Aggiornamento:

<DatePicker x:Name="dtPick" HorizontalAlignment="Left" Margin="401,245,0,0" Grid.Row="1" 
VerticalAlignment="Top" Width="352" DataContext="{Binding personSingle}" 
Date="{Binding personSingle.personDOB.Date,Mode=TwoWay}"/> 
+0

Avete impostato 'DataContext'? – Xyroid

+0

@Xyroid - sì, l'ho fatto. – webdad3

+0

Controlla se datacontext di datepicker è nullo o no. – Xyroid

risposta

12

ho trovato la risposta da questo link:

http://bretstateham.com/binding-to-the-new-xaml-datepicker-and-timepicker-controls-to-the-same-datetime-value/

Hai bisogno di scrivere un convertitore per arrivare a questo lavoro in modo appropriato:

public class DateTimeToDateTimeOffsetConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     try 
     { 
      DateTime date = (DateTime)value; 
      return new DateTimeOffset(date); 
     } 
     catch (Exception ex) 
     { 
      return DateTimeOffset.MinValue; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     try 
     { 
      DateTimeOffset dto = (DateTimeOffset)value; 
      return dto.DateTime; 
     } 
     catch (Exception ex) 
     { 
      return DateTime.MinValue; 
     } 
    } 
} 
+0

Non usare mai try/catch in un flusso logico! Sostituiscilo con un if/else. In questo caso 'if (value is DateTime) {...} else {...}' –

1

Come è stato spiegato per me, è meglio lanciare un'eccezione durante la conversione, quindi utilizzare un valore predefinito.

public class DateTimeToDateTimeOffsetConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, string language) 
    { 
     return new DateTimeOffset((DateTime)value); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, string language) 
    { 
     return ((DateTimeOffset)value).DateTime; 
    } 
}