WPF ViewModel中获取控件事件
标签: C# ; WPF ;
参考:https://blog.csdn.net/Backspace110/article/details/96327660
例如在ViewModel中获取WPF中DatePicker控件选中的日期。
1.Xaml中添加:
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
2.要获取的事件、属性所属的控件中添加:
<b:Interaction.Triggers>
<b:EventTrigger EventName="事件名称">
<prism:InvokeCommandAction Command="{Binding 命令}" TriggerParameterPath="Source" />
</b:EventTrigger>
</b:Interaction.Triggers>
注意此处EventName为要获取的控件的事件名称,必须一模一样。
示例:
- View中:
<DatePicker
x:Name="DatePicker1"
Margin="10,0,50,0"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
Background="White"
BorderThickness="0"
FirstDayOfWeek="Monday"
FontSize="14">
<d:Interaction.Triggers>
<d:EventTrigger EventName="SelectedDateChanged">
<prism:InvokeCommandAction Command="{Binding SelectDate}" TriggerParameterPath="Source" />
</d:EventTrigger>
</d:Interaction.Triggers>
<DatePicker.Resources>
<Style TargetType="DatePickerTextBox">
<!-- 显示为年月日样式 -->
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<TextBox
x:Name="DatePicker_TextBox"
BorderThickness="0"
Text="{Binding Path=SelectedDate, StringFormat={}{0:yyyyMMdd}, RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DatePicker.Resources>
</DatePicker>
- ViewModel中:(prism)
public class QueryViewModel : BindableBase
{
//绑定至前台
private DelegateCommand<object> _SelectDate;
public DelegateCommand<object> SelectDate { get => _SelectDate ??= new DelegateCommand<object>(ActionSelect); }
//存储选择日期改变后的值
private string _SeleceDate;
public string SeleceDate
{
get { return _SeleceDate; }
set { _SeleceDate = value; RaisePropertyChanged(); }
}
//响应“选择数据改变”事件
private void ActionSelect(object obj)
{
SeleceDate = (obj as System.Windows.Controls.DatePicker)?.Text;//此处可获取控件的属性、方法、事件
}
}