在MVVM的TextBox.GotFocus()事件上显示日历



我有一个应用程序,其中有文本框。在获得焦点后,我需要显示日历弹出。

我的问题是如何显示订阅GotFocus事件并通过视图模型显示日历?

为像这样的特定于视图的任务编写隐藏代码是完全可以接受的,但是如果您坚持要有干净的隐藏代码文件,请执行以下操作

你将需要MVVMLight . extras . wpf4 . DLL和system . windows . interactive . DLL,第二个DLL主要是blend,谷歌第一个,无论如何你都可以在MVVMLight包中找到它们。

参照如下:

xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WPF4"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

查看你的textBox

<TextBox>
<i:Interaction.Triggers>
 <i:EventTrigger EventName="GotFocus">
    <cmd:EventToCommand Command="{Binding showCalendar, Mode=OneWay}" MustToggleIsEnabledValue="True"/>
    </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>

在你的视图模型上,你应该有一个属性绑定到你的Calendar Visibility属性,在命令调用的方法中把它改为Visible

您真的不需要到ViewModel中进行此操作-它可以在XAML中非常简单地完成。在TextBox的IsFocused属性的绑定上使用boolean可视性转换器

            <TextBox x:Name="_textBox" Text="{Binding Text}" />
            <myNameSpace:Calendar Visibility="{Binding ElementName=_textBox, Path=IsFocused, Converter={x:Static _boolToVisibilityConverter}, Mode=OneWay}" />

最新更新