2014-12-23 3 views
2

У меня есть приложение WPF с несколькими вкладками. Под каждой вкладкой пользователь может изменить некоторые настройки (используя CheckBoxes, TextBoxes и т. Д.), А затем пользователь должен нажать кнопку «Обновить», чтобы сохранить эти настройки. Все работает нормально, но одно из требований - предупредить пользователя, если он попытается перейти на другую вкладку, не нажав кнопку «Обновить». Так что я пытаюсь использовать обработчик событияWPF, определить, на какую вкладку вы перемещаетесь AWAY от

TabItem_LostFocus 

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

e.Handled = true 

для каждого элемента управления у меня есть, но это не звучит, как элегантное решение (особенно, если у меня нет обработчиков событий нажмите на все под мои закладками). Есть ли другой способ определить, когда вы переключаетесь с текущей вкладки? Спасибо

+0

вы хотите запретить пользователю навигации от вкладки, если они не нажмите кнопку ОК на вашем всплывающем окне? – user1514042

+0

Я хочу, чтобы пользователь не переходил с вкладки, пока он не сохранит изменения с вкладкой (нажав кнопку «Обновить»). Я думаю, что получил ответы, которые я искал. Но если у вас есть еще более элегантное решение, поделитесь :) Спасибо – SYB

ответ

1

Для достижения ваших требований, вам просто нужно привязать данные к TabControl.SelectedIndex или TabControl.SelectedItem свойства:

<TabControl ItemsSource="{Binding TabItemCollection}" 
    SelectedItem="{Binding SelectedTabItem}" /> 

Тогда в вашей модели представления или коде позади:

private YourDataType selectedItem; 
public YourDataType SelectedItem 
{ 
    get { return selectedItem; } 
    set 
    { 
     // selectedItem represents the previous TabItem 
     // value represents the new TabItem 
     selectedItem = value; 
    } 
} 
+0

Спасибо! Это именно то, что мне нужно! Я бы дал вам Vote Up, но у меня нет кредитов LOL – SYB

+0

Пожалуйста, см. [Что делать, если кто-то отвечает на мой вопрос?] (Http://stackoverflow.com/help/someone-answers) на странице Справочный центр переполнения стека. – Sheridan

0

You может связываться с свойством IsSelected каждого TabItem .. и затем выполнять вашу проверку внутри сеттера

<TabControl> 
    <TabItem IsSelected="{Binding TabItem1IsSelected}"/> 
</TabControl> 

недвижимости:

public bool TabItem1IsSelected 
{ 
    get { return _tabItem1IsSelected; } 
    set 
    { 
     if (_tabItem1IsSelected) 
     { 
      if (!value) 
      { 
       // Check to see if user has updated 

       if (!userUpdated) 
       { 
        value = true; 
       } 
      } 
     } 

     _tabItem1IsSelected = value; 
     RaisePropertyChanged(); 
    } 
} 
+0

Спасибо! Это намного проще, чем я думал. Я новичок в концепции WPF/Binding – SYB

Смежные вопросы