Frage

Ich habe 3 Textfelder auf Bearbeiten eines Datetime . Was Mitteilung wichtig ist, ist, dass diese zwei Textfelder bearbeiten die Stunden und Minuten des ersten TextBox Datetime-Wertes. Ein Datum und 2 bis bearbeiten Stunden und Minuten zu bearbeiten. Wie würdest du das machen? Der folgende Code entspricht nicht der Datetime ändert sich, wenn die Stunde oder Minute bearbeiten, weil es tut ToString ( „HH“) und der Datetime-Wert ist verloren:

 <TextBox Text="{Binding MyDateTime}"  />

    <!--This cannot work : it's just for clearing purposes -->
    <TextBox Text="{Binding MyDateTime, StringFormat=\{0:HH\}}}"  />
    <TextBox Text="{Binding MyDateTime}, StringFormat=\{0:mm\}}"  />

Natürlich kann ich ein Ansichtsmodell als Datacontext, wo ich es programmatisch lösen würde. Aber ich will nur wissen, ob es eine Möglichkeit direkt in XAML ist

War es hilfreich?

Lösung

Es ist nicht ohne weiteres möglich, mit XAML nur. Es gibt mehrere Möglichkeiten, wie diese zu lösen:

1. Write-Steuerelement oder Benutzersteuerung, die diese

tun kann

Sie können eine individuelle Steuerung / Benutzerkontrolle wirte (z DateTimeTextBox), das eine Eigenschaft DateTime Value hat, dass Ihr XAML gegen binden kann und dass enthält Logik zu konvertieren auf den Wert Datetime eingegeben in einem seiner beiden Textfelder. Anstelle von zwei Textfelder können Sie auch so etwas wie MaskedTextBox haben.

2. Zwei spezielle Eigenschaften im Ansichtsmodell

Wenn Sie mit MVVM gehen könnten Sie Ihre Ansichtsmodell zwei spezielle Eigenschaften int DateTimeHours int DateTimeMinutes geben und binden gegen diese:

<TextBox Text="{Binding MyDateTimeHours}"  />
<TextBox Text="{Binding MyDateTimeMinutes}"  />

Ihr Ansichtsmodell würde dann verschmilzt die beiden Eigenschaften in einem einzigen Datetime-Wert.

Andere Tipps

Sie benötigen einen Konverter mit 2 Art und Weise zu verwenden, Bindung und einem Konverter Parameter. Speichern Sie die Original-Stunde in dem Converter. Dann können Sie die Bindungsquelle entsprechend aktualisieren.

Ich schätze das ist eine alte Post, aber ich kam in dieser heute und fand eine andere Art und Weise zu handhaben Bindungen mit Datum und Uhrzeit.

habe ich eine partielle Klasse Datums- und Uhrzeit mit 4 Eigenschaften eines für das Datum, 1 Stunde und eine weitere für Minuten genannt. Dann wird eine Nur-Lese-Datums- und Uhrzeit Eigenschaft, dass die Rendite eines Abschlussdatum.

    Partial Public Class dateTimeValue
        Property Dt As Date
        Property Hr As Integer
        Property Mn As Integer

        ReadOnly Property dateTime As Date
            Get
                Dim d = Dt
                d = d.AddHours(d.Hour * -1).AddHours(Hr)
                d = d.AddMinutes(d.Minute * -1).AddMinutes(Mn)
                d = d.AddSeconds(d.Second * -1)
                Return d
            End Get
        End Property
    End Class

Dann in der XAML habe ich ein Raster-Layout mit den Bindungen an ein Datetimepicker und ein paar Comboboxen.

            <UniformGrid Columns="2">
                <TextBlock Text="Date"/>
                <DatePicker SelectedDate="{Binding dateTime.Dt}"/>
                <TextBlock Text="Time"/>
                <WrapPanel>
                    <ComboBox SelectedValue="{Binding dateTime.Hr}" SelectedValuePath="Content">
                        <ComboBoxItem>00</ComboBoxItem>
                        <ComboBoxItem>01</ComboBoxItem>
                        <ComboBoxItem>02</ComboBoxItem>
                        .........
                        <ComboBoxItem>22</ComboBoxItem>
                        <ComboBoxItem>23</ComboBoxItem>
                    </ComboBox>
                    <TextBlock Text=":"/>
                    <ComboBox SelectedValue="{Binding dateTime.Mn}" SelectedValuePath="Content">
                        <ComboBoxItem>00</ComboBoxItem>
                        <ComboBoxItem>15</ComboBoxItem>
                        <ComboBoxItem>30</ComboBoxItem>
                        <ComboBoxItem>45</ComboBoxItem>
                    </ComboBox>
                </WrapPanel>
                <Button Click="saveTask" Content="Save Task"/>
            </UniformGrid>

Dann das korrekte Datum und die Uhrzeit anzuzeigen, um einen Textblock in sagen Sie verwenden können,

<TextBlock Text="{Binding dateTime.dateTime, StringFormat={}{0:dd MMM yyyy - HH:mm}}"/>

Hope dies jemand anderes heraus hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top