2011-08-14 2 views
1

내 응용 프로그램에서 MVVM 패턴을 사용하고 있습니다. Usercontrol 이벤트를 처리 할 수있는 몇 가지 문제가 있습니다.VM에서 사용자 제어 이벤트 또는 MVVM에서보기

난 DatePicker에서 날짜의 특정 범위에 대한 모델로부터 데이터를 페치하고, 버튼 (개시일 및 종료일) 개의 텍스트 박스를 포함라고 사용자가 제어 할 수 있습니다.

나는 나는 그것의 테두리 색상 (예를 들어 녹색)을 변경해야 할 텍스트 상자 중 하나를 집중합니다. 사용자가 잘못된 날짜 값을 다시 입력하면 빨간색으로 테두리 색을 변경해야합니다.

사용자가 잘못된 날짜 값을 입력하면

는 또한 버튼을 비활성화해야합니다.

이러한 이벤트를 처리하는 가장 좋은 방법은 무엇입니까?

미리 감사드립니다.

: 나는 사용자가 시작 날짜 텍스트 상자가 달력에 초점을 맞춘 때 팝업으로 표시되며, 그/그녀가 종료 날짜 텍스트 상자에 초점을 맞춘 경우 다시 일정, 수동으로도 날짜를 입력 할 수 있도록 방법으로 응용 프로그램을 수정 시작일 텍스트 상자에 선택/입력 된 날짜를 차단하여 표시됩니다.

늦게 편집하여 죄송합니다. 당신이 사용자로부터 유효하지 않은 데이터를 기반으로 UI의 모양을 업데이트해야하는 경우

답변

2

, 당신은 Data Validation에 보일 것입니다. 주제에 다른 useful link가 있습니다.

은 테두리 색상 녹색을 변경하는 경우, 당신은 스타일을 사용하는 것이 좋습니다. 불행히도 현재로서는이 문제를 테스트 할 수 없지만 속성은 FocusVisualStyle입니다.

MSDN 설명서를 말한다 :

이가 키보드 포커스를 캡처 할 때 요소에 적용되는 모양, 효과 또는 기타 스타일 특성을 사용자 지정할 수 있도록하는 속성을 설정합니다.

희망 하시겠습니까? VS가 설치되어있는 컴퓨터를 사용할 때 FocusVisualStyle 속성을 사용하여 멋진 샘플을 얻을 수 있는지 확인하려고합니다. 나는 아직 그것을 사용하지 않았으므로 이것은 재미 있어야한다. : O)

편집 : 좋아

, 당신이 매우 유사한 스타일을 사용할 수 있습니다 "초점, 녹색 TextBox 국경을 강조"에 대한 있도록.

<Window.Resources> 
     <Style TargetType="TextBox"> 
      <Style.Triggers> 
       <Trigger Property="IsFocused" Value="True"> 
        <Setter Property="BorderBrush" Value="Green" /> 
        <Setter Property="BorderThickness" Value="2" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Resources> 

나는 BorderThickness을 2로 늘려서 녹색으로의 변경이 눈에 띄게됩니다.

+0

이벤트를 MVVM 패턴으로 처리해야하는 위치와 관련된 질문. 답장을 보내 주셔서 감사합니다. – Syed

+0

질문을 올바르게 이해하면 이벤트를 반드시 작성할 필요는 없습니다. 예를 들어, 테두리 색상을 변경하려는 것은 이벤트가 아닌 스타일로 수행하려는 것입니다. 유효하지 않은 입력에서 테두리 색상을 빨간색으로 변경하면 데이터 유효성 검사를 사용하는 것이 좋습니다. –

+0

이벤트 처리를 코드 숨김 또는 명령을 사용할지 여부를 결정하는 데 문제가있는 경우 여기에서 유용한 체크 아웃해야합니다. http://stackoverflow.com/questions/6137771/events-rather-than- commands-in-mvvm –

2

당신이 설명하고있는 이벤트를 처리하기위한 가장 좋은 방법은 이벤트를 사용하지 않는 것입니다. 스타일을 사용하여 집중 요소의 시각적 모양을 변경하고 버튼을 활성화/비활성화하는 명령을 사용하여 잘못된 데이터를 입력 할 때 컨트롤 모양을 변경합니다.

사용자 컨트롤의 이벤트에 대한 유스 케이스가 여전히 있습니다.필요한 경우 대개 가장 좋은 방법은 이벤트 처리기를 컨트롤의 코드 숨김에 넣고 DataContext에 알려진 속성을 설정하여 이벤트 처리기가 뷰 모델과 통신하도록하는 것입니다. 이렇게하면 인터페이스를 만들어 컨트롤과 뷰 모델 간의 상호 운용 특성을 명확히하고 사용자 컨트롤이 통신하고있는 객체에 대해 알아야 할 것을 제한하는 것이 좋습니다.

+0

MVVM 패턴에서 "보기"에 이벤트 처리를위한 코드가 포함될 수 있습니다. – Syed

+0

예. 예 : 선택한 항목을 클릭하거나 F2 키를 눌러 텍스트를 편집 할 수있는 ListBox 및 편집을 중단하려면 ESC 키를 누르거나 저장하려면 Enter 키를 누릅니다. 이 작업을 수행하려면보기에서 마우스 업 및 키 누르기 이벤트를 처리해야합니다. 뷰 모델은'Text' 속성과'IsEditingText' 속성 ('TextBox' 또는'TextBlock'이'Text'를 표시해야하는지 여부를 결정하기 위해'ItemTemplate'의 스타일을 사용합니다)을 노출해야합니다. 결국 이것은 'IEditableText' 인터페이스를 구현하는 뷰 모델과 함께 사용하기위한 사용자 정의 컨트롤로 발전합니다. –

관련 문제