yoshikazuendo
1/20/2017 - 3:29 AM

【WPF】【MVVM】MVVMでControlのFocusを指定する。

【WPF】【MVVM】MVVMでControlのFocusを指定する。

<!-- usage -->
<!-- ViewModelにIsSelectedプロパティを用意してあげて、その値を変更することでbehaviorが走り、Focusが変わる。 -->
<TextBox my:FocusExtension.IsFocused="{Binding IsSelected}" />
// Focus用behaviorを作ってあげて、それを利用するのが良さそう。
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();
        }
    }
}