0

DateTime を編集するTextBoxes が 3 つあります。注意すべき重要なことは、これら 2 つの TextBox が、最初の TextBox の DateTime 値の時間と分を編集していることです。1 つは日付を編集し、2 つは時間と分を編集します。どうやってそれをしますか?以下のコードは、ToString("HH") を実行し、DateTime 値が失われるため、時間または分を編集するときに 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\}}"  />

もちろん、プログラムで解決する DataContext として ViewModel を使用できます。しかし、XAMLに直接可能性があるかどうか知りたいだけです

4

4 に答える 4

2

XAML だけでは簡単に実現できません。これを解決する方法はいくつかあります。

1. これを実行できるカスタム コントロールまたはユーザー コントロールを作成します。

DateTime Valuexaml がバインドできるプロパティを持ち、2 つのテキスト ボックスのいずれかに入力された日時値に変換するロジックを含むカスタム コントロール/ユーザー コントロール (DateTimeTextBox など) を作成できます。2 つのテキスト ボックスの代わりに、maskedtextbox のようなものを使用することもできます。

2. ViewModel の 2 つの専用プロパティ

MVVM を使用する場合は、ViewModel に 2 つの専用プロパティint DateTimeHours int DateTimeMinutesを指定し、それに対してバインドできます。

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

次に、ViewModel は 2 つのプロパティを 1 つの DateTime 値にマージします。

于 2010-05-21T08:09:37.793 に答える
0

2way バインディングとコンバーター パラメーターを備えたコンバーターを使用する必要があります。元の時間をコンバーターに保存します。その後、バインディング ソースを適切に更新できます。

于 2010-05-21T07:58:05.910 に答える
0

これが古い投稿であることを感謝しますが、今日これに出くわし、日付と時刻のバインドを処理する別の方法を見つけました。

日付用、時間用、分用の 4 つのプロパティを持つ dateTime という部分クラスを作成しました。次に、完了した日付を返す読み取り専用の dateTime プロパティ。

    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

次に、XAML で、DateTimePicker といくつかの ComboBox へのバインディングを含むグリッド レイアウトを使用しました。

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

次に、たとえばテキストブロックに正しい日付と時刻を表示するには、使用できます

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

これが他の誰かを助けることを願っています。

于 2015-10-07T10:22:04.757 に答える