Внимание набора на TextBox в WPF из модели представления

У меня есть a TextBox и a Button по моему мнению.

Теперь я проверяю условие после нажатия кнопки и если условие оказывается ложью, отображая сообщение пользователю, и затем я должен установить курсор на TextBox управление.

if (companyref == null)
{
    var cs = new Lipper.Nelson.AdminClient.Main.Views.ContactPanels.CompanyAssociation(); 

    MessageBox.Show("Company does not exist.", "Error", MessageBoxButton.OK,
                    MessageBoxImage.Exclamation);

    cs.txtCompanyID.Focusable = true;

    System.Windows.Input.Keyboard.Focus(cs.txtCompanyID);
}

Вышеупомянутый код находится в ViewModel.

CompanyAssociation имя представления.

Но курсор не вкладывает, устанавливает TextBox.

xaml:

<igEditors:XamTextEditor Name="txtCompanyID" 
                         KeyDown="xamTextEditorAllowOnlyNumeric_KeyDown"
                         ValueChanged="txtCompanyID_ValueChanged"
                         Text="{Binding Company.CompanyId,
                                        Mode=TwoWay,
                                        UpdateSourceTrigger=PropertyChanged}"
                         Width="{Binding ActualWidth, ElementName=border}"
                         Grid.Column="1" Grid.Row="0"
                         VerticalAlignment="Top"
                         HorizontalAlignment="Stretch"
                         Margin="0,5,0,0"
                         IsEnabled="{Binding Path=IsEditable}"/>

<Button Template="{StaticResource buttonTemp1}"
        Command="{Binding ContactCommand}"
        CommandParameter="searchCompany"
        Content="Search"
        Width="80"
        Grid.Row="0" Grid.Column="2"
        VerticalAlignment="Top"
        Margin="0"
        HorizontalAlignment="Left"
        IsEnabled="{Binding Path=IsEditable}"/>
124
задан ASh 21 October 2019 в 14:41
поделиться

2 ответа

Позвольте мне ответить на ваш вопрос в трех частях.

  1. Мне интересно, что в вашем примере означает "cs.txtCompanyID"? Это элемент управления TextBox? Если да, то вы ошиблись. Вообще говоря, не рекомендуется иметь какую-либо ссылку на пользовательский интерфейс в вашей ViewModel. Вы можете спросить "Почему?" но это еще один вопрос для публикации в Stackoverflow:).

  2. Лучший способ отследить проблемы с Focus - это ... отладка исходного кода .Net. Без шуток. Это много раз экономило мне много времени. Чтобы включить отладку исходного кода .net, обратитесь к блогу Шона Брука .

  3. Наконец, общий подход, который я использую для установки фокуса из ViewModel, - это прикрепленные свойства. Я написал очень простое вложенное свойство, которое можно установить на любом UIElement. И его можно связать, например, со свойством ViewModel IsFocused. { public static bool GetIsFocused (объект DependencyObject) { return (bool) obj.GetValue (IsFocusedProperty); } public static void SetIsFocused (объект DependencyObject, значение типа bool) { obj.SetValue (IsFocusedProperty, значение); } общедоступный статический только для чтения DependencyProperty IsFocusedProperty = DependencyProperty.RegisterAttached ( "IsFocused", typeof (bool), typeof (FocusExtension), новый UIPropertyMetadata (false, OnIsFocusedPropertyChanged)); частный статический void OnIsFocusedPropertyChanged ( DependencyObject d, DependencyPropertyChangedEventArgs e) { var uie = (UIElement) d; если ((bool) e.NewValue) { uie.Focus (); // Плевать на ложные значения. } } }

    Теперь в вашем представлении (в XAML) вы можете привязать это свойство к вашей ViewModel:

     
    

Надеюсь, это поможет :). Если это не относится к ответу №2.

Ура.

253
ответ дан 24 November 2019 в 01:03
поделиться
System.Windows.Forms.Application.DoEvents();
Keyboard.Focus(tbxLastName);
-7
ответ дан 24 November 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: