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

发布于 2024-11-28 05:01:49 字数 92 浏览 0 评论 0原文

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

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

I have an application which is having TextBox. Upon getting the focus, I need to show the Calendar as Popup.

My question is how to show subscribe the GotFocus event and show the calendar through view model?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

停顿的约定 2024-12-05 05:01:49

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

您将需要 MvvmLight.Extras.WPF4.dll 和 System.Windows.Interactivity。 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>
<i:Interaction.Triggers>
 <i:EventTrigger EventName="GotFocus">
    <cmd:EventToCommand Command="{Binding showCalendar, Mode=OneWay}" MustToggleIsEnabledValue="True"/>
    </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>

,您应该有一个绑定到日历可见性属性的属性,在命令调用的方法中将其更改为可见。

It is fairly acceptable to write code-behind for view-specific tasks like this one, however if you insist to have clean code-behind files , do the following

you will need MvvmLight.Extras.WPF4.dll and System.Windows.Interactivity.dll, the second DLL comes mainly with blend , google the first and at any case you can find them both on the MVVMLight package.

reference them as follows:

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

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

see your textBox

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

on your view model you should have a property that is bound to your Calendar Visibility property , change it to Visible inside the method invoked by the command.

不即不离 2024-12-05 05:01:49

您实际上不需要为此转到 ViewModel - 它可以在 XAML 中非常简单地完成。在附加的绑定上使用 BooleanToVisibilityConverter到 TextBox 的 IsFocused 属性。

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

You really don't need to go to the ViewModel for this - it can be done very simply in XAML. Use a BooleanToVisibilityConverter on a binding that is attached to the TextBox's IsFocused property.

            <TextBox x:Name="_textBox" Text="{Binding Text}" />
            <myNameSpace:Calendar Visibility="{Binding ElementName=_textBox, Path=IsFocused, Converter={x:Static _boolToVisibilityConverter}, Mode=OneWay}" />
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文