WPFViewModel中使用空间事件

发布时间 2023-06-15 09:44:56作者: ouououu

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;//此处可获取控件的属性、方法、事件
        }
    }