#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>
Как вы можете видеть, в этом случае он подключается к событию «Проверено», а затем вызывает команду. Таким образом, вы можете сделать то же самое с любым элементом управления и событием, из которого вам нужно выполнить команду.