Laden...

TabItem change unterbinden

Erstellt von Beathoven vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.352 Views
B
Beathoven Themenstarter:in
23 Beiträge seit 2011
vor 11 Jahren
TabItem change unterbinden

Guten Morgen,

ich suche eine Möglichkeit, den Wechsel auf ein anderes TabItem in einem TabCOntrol zunächst prüfen zu können.
Eine Methode wie "PreventSelectionChanged" gibt es ja leider nicht.

Bei meiner Suche nach einer Lösung komme ich immer wieder auf diese Seite:

http://joshsmithonwpf.wordpress.com/2009/09/04/how-to-prevent-a-tabitem-from-being-selected/

Ich habe den angegeben Code fast 1:1 ein komplett leeres Projekt übertragen, das sieht dann so aus:


public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var items = new string[] {"A", "B"};
            tabControl1.ItemsSource = items;
            var view = CollectionViewSource.GetDefaultView(items);
            view.CurrentChanging += this.Items_CurrentChanging;
        }

        void Items_CurrentChanging(object sender, CurrentChangingEventArgs e)
        {
            bool allow = false;

            if(!allow)
            {
                int prevIdx = tabControl1.Items.IndexOf(tabControl1.SelectedContent);
                tabControl1.SelectedIndex = prevIdx;
            }
        }   
    }

Aber egal wie ich es auch anstelle: das Event 'Items_CurrentChanging' wird nie aufgerufen. Weiß jemand Rat?

Danke und Gruß

109 Beiträge seit 2011
vor 11 Jahren

Hallo,

das Thema wurde vor kurzem hier: Daten beim Wechsel von einem UserControl zum anderen speichern besprochen 😉

Da du nach 2 Wochen immer noch nicht bei dem Thema weiter zu sein scheinst habe ich mal dein Beispielprojekt von damals etwas angepaßt (hatte grad mal bissl Langeweile 😉

Dazu aber noch folgendes: ich habe dein Beispiel genommen und wirklich nur so viel umgebaut das es erst mal irgendwie funktioniert (Validierung beim Umschalten der TabItems). Es sind jede Menge Sachen dabei die man anders machen sollte bzw. sogar muß (z.B. MVVM, generische Erzeugung der TabItems). Soviel Langeweile habe ich dann aber auch nicht... das wäre auch nicht der Sinn der Sache alles vorzukauen.
Ich bin mir aber ziemlich sicher das du bei wachsender Projektgröße automatisch auf Probleme stoßen wirst bei denen du dann gewisse Sachen neu überdenken und umbauen mußt. Wie schon damals geschrieben empfehle ich dir beispielsweise das MVVM-Muster für WPF anzuschauen.

Um Rekursion zu verstehen, muss man erst mal Rekursion verstehen, muss man erst mal Rekursion verstehen, ....

B
Beathoven Themenstarter:in
23 Beiträge seit 2011
vor 11 Jahren

Guten Morgen 😃

und danke!
Deine Vermutung ist nicht ganz richtig: ich bin durchaus in den letzten zwei Wochen voran gekommen, allerdings mit 100 Unterbrechungen. Tatsächlich hatte ich eine Lösung entwickelt, die Deiner ähnelt.
Das Problem war halt nur, dass meine Lösung nicht für ein TabControl funktionierte.. aber auch da habe ich mittlerweile eine Lösung entwickelt.

Dein Ansatz unterscheidet sich von meinem eigentlich erstmal nur dadurch, dass Du neben Delegates auch noch Events einsetzt. Mit Sicherheit keine schlechte Idee - ich werde das also nochmal überdenken.

Diese MVVM Geschichte hab ich mir schon angesehen - auch hier: macht Sinn. Ich kenne ähnliche Patterns, vor allem das MVC Pattern. Es richtig ein- bzw. umzusetzen hab ich aber noch nicht drauf - kommt noch.

Erstmal danke bis hierhin 😃
VG
Beathoven

PS: Achja - wenn sich einer wundern sollte, warum ich meine Lösung dann nicht gepostet habe: da ich noch nicht 100% sagen kann, ob meine Lösung wirklich best practice ist, hielt ich es für besser, den Kram nicht zu veröffentlichen 😃