Показать календарь на событии TextBox.GotFocus () в MVVM - PullRequest
1 голос
/ 05 августа 2011

У меня есть приложение с TextBox.После получения фокуса мне нужно показать календарь как всплывающее окно.

Мой вопрос: как показать подписку на событие GotFocus и показать календарь через модель представления?

Ответы [ 2 ]

4 голосов
/ 05 августа 2011

Вполне приемлемо написать код для специальных задач вида, подобных этой, однако, если вы настаиваете на чистых файлах кода, выполните следующее

вам понадобятся MvvmLight.Extras.WPF4.dll и System.Windows.Interactivity.dll, вторая DLL поставляется в основном с blend, google первая, и в любом случае вы можете найти их обе в пакете 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>

в вашей модели представления у вас должно быть свойство, которое привязано к свойству видимости календаря, замените его на Visible внутри метода, вызываемого командой.

1 голос
/ 05 августа 2011

Вам действительно не нужно идти в 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}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...