Обновите реквизит Viewmodel, когда пользовательский элемент управления потерял фокус - PullRequest
0 голосов
/ 04 апреля 2019
<UserControl  UIHelper:FocusExtension.IsFocused="{Binding FocusUserControl,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Focusable="True" IsTabStop="True">

здесь я добавил IsFocused prop для поддержания фокуса usercontrol

 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();
            }
        }
    }

это мой класс FocusExtension

public bool FocusUserControl
        {
            get { return focusUserControl; }
            set
            {
                focusUserControl = value;
                OnPropertyChanged(new PropertyChangedEventArgs("FocusUserControl"));
            }
        }

это моя виртуальная машина.который связан, теперь в пользовательском управлении, у меня есть кнопка.когда я нажимаю на него, появляется новый пользовательский элемент управления .открыть в это время Мне нужно обновить FocusUserControl на false.как , фокус больше не на этом контроле пользователя .Я застрял здесь, пожалуйста, предложите что-нибудь, спасибо за вашу помощь.

**

Обновление я добавил что-то вроде этого

**

 private static void OnIsFocusedPropertyChanged(
            DependencyObject d,
            DependencyPropertyChangedEventArgs e)
        {
            uie = (UIElement)d;
            if ((bool)e.NewValue)
            {
                uie.LostKeyboardFocus += LostFocus;
                uie.Focus();
            }

        }
        static void LostFocus(object sender, RoutedEventArgs e)
        {
            uie.LostKeyboardFocus -= LostFocus;
            // Here i need to update `FocusUserControl` to false 
        }

в LostFocus мне просто нужно обновить FocusUserControl на false.как мне это сделать?действительно используйте некоторую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...