Запомнить старое положение вкладок TabControl WPF

286
17 октября 2017, 00:31

Как запомнить старое положение вкладок в TabControl при каждом запуске программы. ***Мое решение При закрытие программы запоминаю индекс каждой вкладки

3tab:0,1:1,ff2:2,newtab:3,Новый sdfsdf ываыва:4

header вкладка:индекс вкладки

Потом вызвываю метод, который проверяет изменения вкладок.

*В tabs нажодится массив с старым положением вкладок

*В TabContol1 новые вкладки.

       int PositionTabs(string[] tabs)
    {
        foreach (var item in tabs)
        {
            string[] oldtabs = item.Split(':');
            foreach (TabItem tbc in TabContol1.Items)
            {
                if(tbc.Header.ToString() == oldtabs[0])
                {
                    var tabControl = tbc.Parent as TabControl;
                    var tabNew = tabControl.Items.IndexOf(tbc);
                    if(tabNew != Convert.ToInt32(oldtabs[1]))
                    {
                        foreach (TabItem tbc2 in TabContol1.Items)
                        {
                            var tabControl2 = tbc2.Parent as TabControl;
                            int tabNew2 = tabControl.Items.IndexOf(tbc2);
                            if(tabNew2 == Convert.ToInt32(oldtabs[1]))
                            {
                                tabControl.Items.Remove(tbc2);
                                tabControl.Items.Insert(tabNew, tbc2);
                                tabControl.Items.Remove(tbc);
                                tabControl.Items.Insert(tabNew2, tbc);
                            }
                        }
                    }
                }
            }
        }
        return 0;
    }

1 перемещение вкладки работает, но вот после чего появляется исключение Коллекция была изменена; невозможно выполнить операцию перечисления Кто поможет, мб есть другое рещение, и я слишком намудрил с 3 циклами.

Answer 1

Вы делаете неправильно. Вы не должны работать на уровне визуальных контролов, и пытаться создать их и переставить.

Правильный подход — ваши табы должны создаваться автоматически, через привязку ItemsSource к модели представления (VM). Последовательность табов при этом определяется последовательностью элементов в ItemsSource. Таким образом, если порядок элементов в VM правильный, то и табы будут автоматически в правильном порядке.

READ ALSO
C#. Исключение при многопоточной работе с Queue

C#. Исключение при многопоточной работе с Queue

ЗдравствуйтеСушествует класс очереди последовательного порта, который работает в своем потоке

192
ЭЦП расшифровка ответ ФСС ЭЛН .Net

ЭЦП расшифровка ответ ФСС ЭЛН .Net

Возникла проблема интеграции с ЭЛН ФССИспользую КриптоПро для подписи запроса

949
Можно ли открывать файлы напрямую через ListBox?

Можно ли открывать файлы напрямую через ListBox?

Можно ли открывать файлы напрямую через ListBox? Нужно например: если нажать в ListBox вторую строку и тогда, чтоб открылся в программе файл "Scene2"...

357