Я разрабатываю сложные формы ввода данных с различными всплывающими поисками и т. Д. Из-за разных вещей - потеря ориентации определенных элементов управления теряется, и мне нужен какой-то способ установить фокус в 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, это важно для правильного ввода данных. Но я хочу, чтобы код был несколько «красивым»