Pregunta

tengo 3 cuadros de texto a editar un DateTime . Lo que es importante tener en cuenta es que esos 2 cuadros de texto están editando la hora y los minutos del primer cuadro de texto valor DateTime. Uno para editar la fecha y 2 para editar hora y los minutos. ¿Cómo lo harías tú? El código de abajo no refleja la DateTime cambia al modificar la hora o minuto, porque hace ToString ( "HH") y se pierde el valor DateTime:

 <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\}}"  />

Por supuesto que puede tener un modelo de vista como DataContext donde me gustaría resolverlo mediante programación. Pero sólo quiero saber si hay alguna posibilidad directamente en XAML

¿Fue útil?

Solución

No es posible fácilmente con sólo el XAML. Hay varias posibilidades de cómo resolver esto:

1. control personalizado de escritura o de control de usuario que puede hacer esto

Se podría wirte a / control de usuario control personalizado (por ejemplo DateTimeTextBox) que tiene un DateTime Value la propiedad de que su xaml puede unirse contra y que contiene la lógica para convertir al valor de fecha y hora introducida en una de sus dos cuadros de texto. En lugar de dos cuadros de texto que también podría tener algo como MaskedTextBox.

2. Dos propiedades dedicados en el modelo de vista

Si vas con MVVM usted podría dar a su modelo de vista dos propiedades dedicadas int DateTimeHours int DateTimeMinutes y se unen en contra de que:

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

Su modelo de vista y luego se fusionaría las dos propiedades en un solo valor DateTime.

Otros consejos

Usted tendrá que utilizar un convertidor con 2 vinculante camino y un parámetro del convertidor. Guardar la hora original en el convertidor. A continuación, puede actualizar el origen de enlace adecuada.

aprecio esto es una entrada antigua, pero me encontré con este hoy y se encontró otra forma de enlaces de mango con fecha y hora.

I creó una clase parcial llamado dateTime con 4 propiedades uno para la fecha, 1 para hora y otro para minutos. A continuación, una de sólo lectura fechaHora propiedad que devuelve una fecha de finalización.

    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

A continuación, en el XAML que utiliza un diseño de cuadrícula con los enlaces a un DateTimePicker y un par de ComboBoxes.

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

A continuación, se mostrará la fecha y la hora correctas en decir un bloque de texto que puede utilizar

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

Espero que esto ayude a alguien más ahí fuera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top