我有一个应用程序,其中有文本框。在获得焦点后,我需要显示日历弹出。
我的问题是如何显示订阅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}" />