我有一個應用程序有TextBox。在獲得焦點時,我需要將日曆顯示爲彈出式窗口。MVVM中的TextBox.GotFocus()事件顯示日曆
我的問題是如何顯示訂閱GotFocus事件並通過視圖模型顯示日曆?
我有一個應用程序有TextBox。在獲得焦點時,我需要將日曆顯示爲彈出式窗口。MVVM中的TextBox.GotFocus()事件顯示日曆
我的問題是如何顯示訂閱GotFocus事件並通過視圖模型顯示日曆?
這是相當可以接受的編寫代碼隱藏視圖特定的這樣一個任務,但是如果你堅持有乾淨的代碼隱藏文件,請執行下列操作
你需要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>
您的視圖模型,你應該有一個綁定到您的日曆可見屬性的屬性,將其更改爲可見裏面的方法由該命令調用。
你真的不需要爲此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}" />
這裏的主要問題是:爲什麼你要在你的'ViewModel'中實現一個純UI功能(顯示一個彈出窗口)?捕捉'GotFocus'事件以將'Popup'的可見性設置爲'true'應該完全可以在MVVM環境中實現,因爲您在這裏處理純UI更改 – Damascus
我同意在這裏使用大馬士革。我會說首選的方法是在模板中使用觸發器來打開彈出窗口。綁定到IsFocused或IsKeyboardFocusWithin(我認爲)似乎是要走的路。 – jjrdk
@Damascus我同意你的觀點。我的問題是,在顯示日曆之後,日曆中的任何更改(日期選擇)需要在ViewModel中反映,並將選定日期顯示爲文本框中的文本。任何想法都會被設計出來...... – Syed