Silverlight MVVM и работа с FOCUS - PullRequest
       0

Silverlight MVVM и работа с FOCUS

1 голос
/ 05 октября 2011

Я разрабатываю сложные формы ввода данных с различными всплывающими поисками и т. Д. Из-за разных вещей - потеря ориентации определенных элементов управления теряется, и мне нужен какой-то способ установить фокус в MVVM. До сих пор я придумал прикрепленное свойство, которое я кодировал следующим образом (фактическое объявление свойства зависимости пропущено):

private static void SetFocus(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var textBox = d as TextBox;
            if (textBox != null)
            {
                textBox.Focus();
            }
        }

Итак, все довольно просто. Когда свойство изменяется - фокус устанавливается.

Мой взгляд:

<TextBox Text="{Binding CurrentItem.SerialNumber, Mode=TwoWay, NotifyOnValidationError=True}" 
                     behaviors:TextBoxBehaviors.IsFocused="{Binding SecondaryControlFocus}"
                     Grid.Column="1" Grid.Row="2" Margin="1" Grid.ColumnSpan="2" TabIndex="2" />

Как вы видите - я прикрепляю это поведение и привязываю к свойству "SecondaryControlFocus".

ViewModel:

public bool SecondaryControlFocus
        {
            get
            {
                return this.secondaryControlFocus;
            }

            set
            {
                this.secondaryControlFocus = value;
                this.RaisePropertyChanged(() => this.SecondaryControlFocus);
            }
        }

И код, как я устанавливаю фокус:

this.SecondaryControlFocus = !this.SecondaryControlFocus;

Для меня этот код пахнет , потому что я должен переключить свойство force и обратно, чтобы вызвать свойство ..

Есть ли лучший способ сделать то, что я делаю? Нет ничего более раздражающего, когда опытный пользователь не может использовать клавиши TAB ... И мне нужно получить контроль над фокусировкой в ​​MVVM, это важно для правильного ввода данных. Но я хочу, чтобы код был несколько «красивым»

1 Ответ

1 голос
/ 12 октября 2011

Пахнет, но я не думаю, что мы можем что-то с этим поделать

Обычно я делаю то же самое, что и вы с AttachedProperty, и держу один IsFocused бул где-то вView (поскольку это проблема конкретного вида, и ее не следует смешивать с бизнес-логикой).Затем я получу View прослушивания какой-либо системы событий, такой как (PRISM EventAggregator или MVVM Light Messenger) для ResetFocus событий, и я буду вызывать событие ResetFocus всякий раз, когда что-то вызывает фокуспереключаться между окнами / страницами или после диалогового окна.

Это не красиво, но работает.

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