2014-10-20 5 views
0

여러 개의 텍스트 상자가있는 사용자 정의 컨트롤이있는 Silverlight 응용 프로그램이 있습니다. MVVM 패턴을 사용하고 있습니다.Silverlight에서 SetFocus하는 방법

추가 버튼을 클릭하면 ViewModel이 일부 논리를 수행합니다. Add Command 로직이 완료된 후, 클릭 할 때마다 SetFocus를 txtName 텍스트 박스에 넣기를 원합니다.

어떻게하면 Silverlight UserControl 및 MVVM에서이 작업을 수행 할 수 있습니까?

답변

2

은 물론 더 "IsFocused"속성이없는, 그러나 당신이 사용할 수있는 두 개 이상의 MVVM 친화적 인 방법이 있습니다 :

  1. 를 사용하여 혼합 SDK의 확장 트리거/액션 세트. 특히 EventTrigger을 단추의 "클릭"이벤트에 사용하고 CallMethodAction을 사용하여 대상 요소에서 "SetFocus"를 호출하십시오.
  2. 첨부 된 속성과 함께 Behavior을 사용하여 대상에 "포커스"를 호출하십시오. 처음 들어

, 당신은 이런 식으로 뭔가를해야합니다 :

<Button Content="Add" 
     xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" 
     xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Click"> 
      <i:InvokeCommandAction Command="{Binding AddCommand}" /> 
      <ei:CallMethodAction TargetObject="{Binding ElementName=NameOfElementToFocus}" 
           MethodName="Focus" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</Button> 

<TextBox x:Name="NameOfElementToFocus" /> 

(또는 대신 CallMethodAction를 사용, 당신은 또한 간단한 "focus" 조치를 사용할 수 있습니다.)


두 번째 방법에 대한 코드는 게시하지 않습니다. 일반적으로 사용할 수있는 일반적인 사례이므로 검색을 통해 앰플 (for example). 기본 아이디어는 Behavior 클래스를 만들고 부울 속성 인 "IsFocused"를 추가하는 것입니다. "변경"핸들러에서 AttachedObject에 "Focus"를 호출합니다. 그런 다음 뷰 모델의 속성에 재산 MVVM 스타일을 결합 할 수있다, 이런 식으로 뭔가 :

<TextBox x:Name="NameOfElementToFocus" my:FocusBehavior.IsFocused="{Binding IsTextBoxFocused}" /> 
+0

오 McGarnagle, 나는 당신에게 맥주 선생님을 구매해야합니다 어느 날, 나는 그렇게 간단 callmethodaction 노선의 결코 생각하지 않았다, 건배. –