我有一个拥有TextBox的应用程序。获得焦点后,我需要将日历显示为弹出窗口。
我的问题是如何显示订阅GotFocus事件并通过视图模型显示日历?
答案 0 :(得分:4)
为像这样的视图特定任务编写代码隐藏是完全可以接受的,但是如果你坚持使用干净的代码隐藏文件,请执行以下操作
你需要MvvmLight.Extras.WPF4.dll和System.Windows.Interactivity.dll,第二个DLL主要是混合,谷歌第一个,无论如何你都可以在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。
答案 1 :(得分:1)
你真的不需要去看ViewModel - 它可以在XAML中非常简单地完成。在附加到TextBox的IsFocused属性的绑定上使用BooleanToVisibilityConverter。
<TextBox x:Name="_textBox" Text="{Binding Text}" />
<myNameSpace:Calendar Visibility="{Binding ElementName=_textBox, Path=IsFocused, Converter={x:Static _boolToVisibilityConverter}, Mode=OneWay}" />