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

时间:2011-08-05 09:08:43

标签: wpf mvvm

我有一个拥有TextBox的应用程序。获得焦点后,我需要将日历显示为弹出窗口。

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

2 个答案:

答案 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}" />