2014-12-08 5 views
0

Вечера все, я столкнулся с проблемой, с SelectionChanged (TabControl) события вызова до LostFocus (TextBox) события.приоритета события: LostFocus вызывается после SelectionChange

Это проблема, так как SelectionChanged срабатывает при смене вкладок, что стажер сбрасывает (TabControl> TabItem> ListView) ListView.SelectedIndex до -1.

В текстовом поле используется LostFocus для обновления/проверки его текстового поля, которые зависят от SelectedIndex. Текст в текстовом поле сохраняется/извлекается из List<string>, и, поскольку индекс изменен, список выходит из пределов.

Я огляделся, устал от нескольких вещей и «взломал» подход, который на самом деле не помог.

<TabControl SelectionChanged="SelectionChanged_Tab" 
    <TabItem .../> 
    <TabItem .../> 
</TabControl> 
<Grid> 
    <Label .../> 
    <TextBox Name="Name" LostFocus="Lost_Focus" .../> 
</Grid> 

Код:

private void SelectionChanged_Tab(object sender, SelectionChangedEventArgs e) 
{ 
    if (e.Source is TabControl) 
    { 
     ListView1.SelectedIndex = -1; 
     ListView2.SelectedIndex = -1; 
    } 
} 

private void Lost_Focus(object sender, RoutedEventArgs e) 
{ 
    TextBox textbox = sender as TextBox; 
    int Index = ListView.SelectedIndex; 

    if (string.IsNullOrEmpty(textbox.Text) || textbox.Text == "0") 
    { 
     textbox.Text = "0"; 
    } 

    switch (textbox.Name) 
    { 
     case "Name": 
      SomeList[Index].AProperty = textbox.Text; 
      break; 
    } 
} 

ответ

0

ОК, так что после того, как думать о проблеме с другой точки зрения, я решил просто сделать TabControl, Focus-состоянии событие и просто сделать его фокус при изменении выбора :

<TabControl SelectionChanged="SelectionChanged_Tab" Focusable="True" 
    <TabItem .../> 
    <TabItem .../> 
</TabControl> 

Код:

private void SelectionChanged_Tab(object sender, SelectionChangedEventArgs e) 
{ 
    if (e.Source is TabControl) 
    { 
     ListView2.Focus(); 
     ListView1.SelectedIndex = -1; 
     ListView2.SelectedIndex = -1; 
    } 

    if (ListView2.SelectedIndex == -1) 
    { 
     ListView1.Focus(); 
    } 
} 

Я знаю, что это не самое изящное решение (В процессе или рефакторинге), но это, похоже, выполняет свою работу.