WPF Onglet Contrôle de Prévenir l'Onglet Modifier

Je suis en train de développer un système d'entretien de l'écran pour mon application dans laquelle j'ai plusieurs onglets, chacun représentant un entretien option c'est à dire de maintenir le système des utilisateurs et cetera. Une fois qu'un utilisateur clique sur modifier/nouvelle pour modifier un enregistrement existant je veux éviter de naviguer à l'extérieur de l'onglet en cours jusqu'à ce que l'utilisateur clique sur enregistrer ou sur annuler.

Après quelques recherches sur google j'ai trouvé un lien http://joshsmithonwpf.wordpress.com/2009/09/04/how-to-prevent-a-tabitem-from-being-selected/ qui semblait à résoudre mon problème, ou alors j'ai pensé.

J'ai essayé de mise en œuvre de cette, mais mon cas ne semble jamais à feu. Ci-dessous mon code XAML.

<TabControl Name="tabControl">
    <TabItem Header="Users">
        <DockPanel>
            <GroupBox Header="Existing Users" Name="groupBox1" DockPanel.Dock="Top" Height="50">
                <StackPanel Orientation="Horizontal">
                    <Label Margin="3,3,0,0">User:</Label>
                    <ComboBox Width="100"  Height="21" Margin="3,3,0,0"></ComboBox>
                    <Button Width="50" Height="21" Margin="3,3,0,0" Name="btnUsersEdit" Click="btnUsersEdit_Click">Edit</Button>
                    <Button Width="50" Height="21" Margin="3,3,0,0" Name="btnUsersNew" Click="btnUsersNew_Click">New</Button>
                </StackPanel>
            </GroupBox>
            <GroupBox Header="User Information" Name="groupBox2">
                <Button Content="Cancel" Height="21" Name="btnCancel" Width="50" Click="btnCancel_Click" />
            </GroupBox>
        </DockPanel>
    </TabItem>
    <TabItem Header="User Groups">

    </TabItem>        
</TabControl>

Et c'est mon code

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;
    }
}

Excuses maintenant, si je suis stupide, mais pour la vie de moi je ne peut pas séance d'entraînement de voir pourquoi mon événement ne se déclenche lorsque l'utilisateur clique sur les onglets.

Merci à tous pour votre aide.

Emlyn

Josh méthode ne fonctionne pas pour moi non plus.

OriginalL'auteur Emlyn | 2011-02-23