Управление изменениями в WPF элемента управления DateTimerPicker

#wpf #binding #command #datetimepicker

Вопрос:

Я использую DateTimePicker в своем приложении WPF MVVC. Это выглядит так:

 <Label Content="Date: "/>
<xctk:DateTimePicker 
  Value="{Binding Example.FirstDate, 
    Mode=TwoWay,
    UpdateSourceTrigger=PropertyChanged, 
    Converter={StaticResource validDateConverter}}"
      Format="Custom" 
      FormatString="{}dd/MM/yyyy HH:mm">
</xctk:DateTimePicker>
 

Что я хотел бы сделать сейчас, так это быть в курсе изменений в дате.
Так что, если пользователь изменит дату, я смогу кое-что сделать в ViewModel. Это должно быть в ViewModel, а НЕ в codebehind.
(Я говорю это потому, что событие-это не вариант).

Моя идея состояла в том, чтобы использовать команду или триггер, но это мне не позволяет (это не вариант). Не мог бы кто-нибудь мне помочь, пожалуйста? Заранее большое вам спасибо.

Комментарии:

1. FirstDate Свойство будет установлено при изменении даты, чтобы вы могли управлять своей логикой в задатчике этого.

Ответ №1:

Это пример использования флажка, но это то же самое для элемента управления DateTimePicker: вам нужно будет добавить ссылку примерно так:

 xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
 

Тогда вы можете сделать это:

 <CheckBox IsChecked="{Binding IsChecked, Mode=TwoWay}"
          Content="{Binding Path=Item.Description}">

    <b:Interaction.Triggers>
        <b:EventTrigger EventName="Checked">
            <b:InvokeCommandAction
                Command="{Binding DataContext.AddUserPermissionCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"
                CommandParameter="{Binding Path=Item.Id}" />
        </b:EventTrigger>

        <b:EventTrigger EventName="Unchecked">
            <b:InvokeCommandAction
                Command="{Binding DataContext.RemoveUserPermissionCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"
                CommandParameter="{Binding Path=Item.Id}" />
        </b:EventTrigger>
    </b:Interaction.Triggers>
</CheckBox>
 

Как вы можете видеть, в этом случае он подключается к событию «Проверено», а затем вызывает команду. Таким образом, вы можете сделать то же самое с любым элементом управления и событием, из которого вам нужно выполнить команду.