TextBox를 사용하는 응용 프로그램이 있습니다. 초점을 맞출 때 캘린더를 팝업으로 표시해야합니다.MVVM에서 TextBox.GotFocus() 이벤트에 캘린더 표시
제 질문은 GotFocus 이벤트를 구독하고보기 모델을 통해 달력을 보여주는 방법입니다.
TextBox를 사용하는 응용 프로그램이 있습니다. 초점을 맞출 때 캘린더를 팝업으로 표시해야합니다.MVVM에서 TextBox.GotFocus() 이벤트에 캘린더 표시
제 질문은 GotFocus 이벤트를 구독하고보기 모델을 통해 달력을 보여주는 방법입니다.
그것은
당신이 MvvmLight.Extras.WPF4이 필요합니다 다음은 깨끗한 코드 숨김 파일을 가지고 주장 할 수 있지만 경우, 이와 같은 뷰 특정 작업을 위해 코드 숨김 쓰기 상당히 허용됩니다. dll 및 System.Windows.Interactivity.dll 두 번째 DLL은 주로 블렌드와 함께 제공되며, 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"
당신이 당신의 달력 Visibility 속성에 바인딩 된 속성을 가지고 있어야 뷰 모델에 텍스트 상자
<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 기능 (팝업 표시)을 구현 하시겠습니까? 'Popup'의 가시성을'true'로 설정하는'GotFocus' 이벤트를 잡는 것은 MVVM 환경에서 트릭을해야합니다. 여기서 순수한 UI 변경을 다루고 있기 때문에 – Damascus
여기 다마스커스에 동의합니다. 선호하는 방법은 템플릿에서 트리거를 사용하여 팝업을 여는 것입니다. IsFocused 또는 IsKeyboardFocusWithin 바인딩 (제 생각 엔) 갈 길이 멀어 보인다. – jjrdk
@Damascus 나는 당신의 요점에 동의했다. 내 문제는 캘린더를 보여준 후에 캘린더의 모든 변경 (날짜 선택)을 ViewModel에 반영하고 선택한 날짜를 텍스트 상자에 텍스트로 표시해야한다는 것입니다. 어떤 아이디어가 appriciated 것입니다 ... – Syed