0

DatePicker und TimePicker in UWA 8.1 für Windows Store und Windows Phone (WinRT) zeigt standardmäßig das heutige Datum und die aktuelle Uhrzeit an, während ich zunächst beide Bedienelemente auf einige einstellen möchte Standard-String sagen wir "Fälligkeitsdatum/-uhrzeit einstellen", weil sie optional sind.Universal Windows Apps 8.1 DatePicker und TimePicker Einstellung Standardzeichenfolge

ich sie auf die folgenden Eigenschaften bin Bindung MVVM Muster und MVVM Lichtbibliotheken nur

public DateTimeOffset? DueDate { get; set; } 

public TimeSpan? DueTime { get; set; } 

Ich habe in der folgenden Art und Weise versucht, bitte eine Lösung vorschlagen.

Ich habe zwei Konverter verwendet, aber es gibt ein Problem.

Wenn ich auf die Schaltfläche "Fälligkeitsdatum festlegen" klicke und dann im DatePicker-Popup-Bildschirm auf das Häkchen klicke, ohne das Datum, den Monat oder das Jahr zu ändern, wird der Konverter nicht ausgelöst, wenn ich das Datum ändere. Monat oder Jahr, dann feuert, sehe ich, dass selbst wenn die Eigenschaft gebunden ist eine Nullable DateTimeOffset der DatePicker in XAML zeigt Datum Wert auf das aktuelle Datum, auch IsHitTestVisible = "False" entfernt den Tilt-Effekt, der schön zu haben ist, weil die Schaltfläche kann ‚t mehr angeklickt werden, aber die Kippeffekt ist keine muss Option für mich

<Page 
    x:Class="UWP.MVVM.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:UWP.MVVM" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:vm="using:UWP.MVVM.ViewModels" 
    xmlns:interactivity="using:Microsoft.Xaml.Interactivity" 
    xmlns:core="using:Microsoft.Xaml.Interactions.Core" 
    xmlns:converters="using:UWP.MVVM.Converters" 
    mc:Ignorable="d" 
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Page.Resources> 
     <converters:DateTimeOffsetToVisibilityConverter x:Key="DateTimeOffsetToVisibilityConverter"/> 
     <converters:DateTimeOffsetToOpacityConverter x:Key="DateTimeOffsetToOpacityConverter"/> 
    </Page.Resources> 

    <Grid Margin="24,24"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <TextBox Header="First Name" 
       Text="{Binding Person.FirstName}"/> 
     <DatePicker Name="DateOfBirth" 
        Date="{Binding Person.DateOfBirth, Mode=TwoWay}" 
        Grid.Row="1" 
        Opacity="{Binding Person.DateOfBirth, Converter={StaticResource DateTimeOffsetToOpacityConverter}}"/> 
     <Button Grid.Row="1" 
       Content="Set Due Date" 
       IsHitTestVisible="False" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       HorizontalContentAlignment="Left" 
       Visibility="{Binding Person.DateOfBirth, Converter={StaticResource DateTimeOffsetToVisibilityConverter}}"/> 
    </Grid> 
</Page> 

namespace UWP.MVVM.Converters 
{ 
    using System; 
    using Windows.UI.Xaml; 
    using Windows.UI.Xaml.Data; 

    public class DateTimeOffsetToVisibilityConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      if (value == null) 
      { 
       return Visibility.Visible; 
      } 
      else 
      { 
       return Visibility.Collapsed; 
      } 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, string language) 
     { 
      if (value == Visibility.Visible) 
      { 
       return null; 
      } 
      else 
      { 
       return DateTimeOffset.Now; 
      } 
     } 
    } 
} 

namespace UWP.MVVM.Converters 
{ 
    using System; 
    using Windows.UI.Xaml; 
    using Windows.UI.Xaml.Data; 

    public class DateTimeOffsetToOpacityConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      if (value == null) 
      { 
       return 0D; 
      } 
      else 
      { 
       return 1D; 
      } 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, string language) 
     { 
      if (value == 0D) 
      { 
       return null; 
      } 
      else 
      { 
       return DateTimeOffset.Now; 
      } 
     } 
    } 
} 

Antwort

1

Sie einen Textblock auf der Datumsauswahl setzen, mit Ihrem gewünschten Text ein.

Legen Sie die Sichtbarkeit des Textblocks in Abhängigkeit vom Wert Ihrer DueDate/DueTime-Eigenschaften mithilfe eines Konverters fest (wenn seine Nullrückgabe sichtbar ist, andernfalls wird die Rückgabe reduziert).

+0

Ich versuchte dies, aber ein Problem konfrontiert, wenn der Benutzer auf den TextBlock klickt der DatePicker sollte gestartet werden, aber der DatePicker hat keine solche Eigenschaft, die ich binden kann, um es zu öffnen, habe ich diesen Beitrag http: // transoceanic gesehen .blogspot.in/2011/08/wp7-create-datepicker-control.html aber ich muss dies in MVVM tun, ich denke, ich muss vielleicht eine DependencyProperty erben und erstellen, aber ich möchte wissen, ob jemand es vorher getan hat oder auf eine bessere Weise –

+0

haben einen Konverter in Datepicker-Stil, der die Deckkraft von contentpresenter auf Null setzt, wenn die Eigenschaft Binded-Datum null ist. –

+0

Zuerst habe ich nicht verstanden, was du gesagt hast, weil ich darüber nachgedacht habe, "wie man den Datepicker startet", dann schaute ich zurück zu IsHitTestVisible = "False", es ist 2 Jahre her, seit ich mit XAML gearbeitet habe, check my edit –