2011-03-17 2 views
0

뷰 모델의 속성에 연결된 연결된 속성을 사용하는 데 중점을두고있는 TextBox가 있습니다. 연결된 속성은 "UIElement.Focus()"를 호출하여 포커스를 설정합니다. 문제는 "GotFocus"이벤트가 발생하지 않는 방식으로 TextBox가 포커스를받을 때입니다. Caliburn.Micro의 Message.Attach를 사용하여 이벤트를 처리합니다. 어떤 아이디어?caliburn에 대한 도움이 필요하십니까? TextBox가 포커스를 얻었을 때의 응답

다음은 TextBox입니다.

<TextBox x:Name="Test" 
     Grid.Column="0" 
     Text="{Binding Test, Converter={StaticResource TestToStringConverter}}" 
     AttachedProperties:FocusExtension.IsFocused="{Binding IsTestFocused}" 
     cal:Message.Attach="[Event GotFocus] = [Action OnGotFocus($eventargs)]; /> 

여기에 첨부 된 속성 (SO에 있음)이 있습니다.

public static class FocusExtension 
{ 
    public static bool GetIsFocused(DependencyObject obj) 
    { 
     return (bool) obj.GetValue(IsFocusedProperty); 
    } 

    public static void SetIsFocused(DependencyObject obj, bool value) 
    { 
     obj.SetValue(IsFocusedProperty, value); 
    } 

    public static readonly DependencyProperty IsFocusedProperty = 
     DependencyProperty.RegisterAttached("IsFocused", typeof (bool), typeof (FocusExtension), 
              new UIPropertyMetadata(false, OnIsFocusedPropertyChanged)); 

    private static void OnIsFocusedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
    { 
     var uie = (UIElement)d; 

     if ((bool)e.NewValue) 
     { 
      uie.Focus(); 
     } 
    } 
} 
+0

첨부 된 속성에 대한 코드를 제공 할 수 있습니까? – devdigital

+0

첨부 된 속성 코드를 추가하도록 업데이트되었습니다. – Snarfblatt

답변

0

나는 이것을 직접 시도해보고 문제를 재현 할 수 있습니다. 왜 이런 일이 발생하는지 잘 모르겠지만 사용자 정의 컨트롤 (뷰) 수명주기와 관련이있을 수 있습니다. 하나의 옵션은 첨부 된 속성을 확장하여 uie.Focus()을 호출하는 지점에서 뷰 모델의 동사를 호출 할 수 있습니다.

동사의 이름은 FocusExtension 속성의 종속성 속성 일 수 있으며보기에서 설정할 수 있습니다.

+0

제 신입선을 용서해주십시오.하지만 "동사를 불러들입니다."라는 말이 무슨 뜻인지 잘 모르겠습니다. 나는 WPF/MVVM에 상당히 익숙하다. – Snarfblatt

+0

괜찮습니다, 그냥보기 모델 클래스에서 메소드를 호출하거나 실행하는 것입니다. 이 경우 OnGotFocus 메서드를 실행하기 만하면 첨부 된 속성을 충분히 일반화 할 수 있으므로 실행할 메서드의 이름이 연결된 속성의 속성이됩니다. 그 말이 맞는다면. – devdigital

+0

당신이 의미하는 바에 대한 간단한 예를 보여줄 수 있습니까? 내가 읽고있는 것에서는 첨부 된 속성이 뷰 모델에 대한 지식을 가지고있는 것처럼 들리지만, 나는 오해라고 생각합니다. – Snarfblatt