WPF Tab Control Prevent Tab Change

Я пытаюсь разработать экран обслуживания системы для своего приложения, в котором у меня есть несколько вкладок, каждая из которых представляет различные варианты обслуживания, т.е. обслуживание пользователей системы и так далее. Как только пользователь нажимает кнопку «изменить / создать», чтобы изменить существующую запись, я хочу предотвратить переход от текущей вкладки до тех пор, пока пользователь не нажмет «Сохранить» или «Отменить».

После некоторого поиска в Google я нашел ссылку http: / /joshsmithonwpf.wordpress.com/2009/09/04/how-to-prevent-a-tabitem-from-being-selected/, который, похоже, решил мою проблему, по крайней мере, я так думал.

Я попытался реализовать это, но мое событие, похоже, никогда не срабатывает. Ниже мой XAML.


    
        
            
                
                    
                    
                    
                    
                
            
            
                

И это мой код.

public partial class SystemMaintenanceWindow : Window
{

    private enum TEditMode { emEdit, emNew, emBrowse }

    private TEditMode _EditMode = TEditMode.emBrowse;        

    private TEditMode EditMode
    {
        get { return _EditMode; }
        set 
        { 
            _EditMode = value; 
        }
    }        

    public SystemMaintenanceWindow()
    {
        InitializeComponent();

        var view = CollectionViewSource.GetDefaultView(tabControl.Items.SourceCollection);
        view.CurrentChanging += this.Items_CurrentChanging;
    }        

    void Items_CurrentChanging(object sender, CurrentChangingEventArgs e)
    {
        if ((e.IsCancelable) && (EditMode != TEditMode.emBrowse))
        {
            var item = ((ICollectionView)sender).CurrentItem;
            e.Cancel = true;
            tabControl.SelectedItem = item;

            MessageBox.Show("Please Save or Cancel your work first.", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
        }
    }        

    private void btnUsersNew_Click(object sender, RoutedEventArgs e)
    {
        EditMode = TEditMode.emNew;
    }

    private void btnUsersEdit_Click(object sender, RoutedEventArgs e)
    {
        EditMode = TEditMode.emEdit;
    }

    private void btnCancel_Click(object sender, RoutedEventArgs e)
    {
        EditMode = TEditMode.emBrowse;
    }
}

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

Спасибо за вашу помощь.

Emlyn

11
задан Emlyn 23 February 2011 в 11:41
поделиться