link1234 Ответов: 2

Обновите элемент treeview в WPF


Привет У меня есть Treeview в моем проекте WPF с C#.
Я использую ниже код для обновления элемента управления TreeView при каждом запустите диалоговое окно openfiledialog.

OpenFileDialog FD = new OpenFileDialog();
          FD.Multiselect = true;
          if (FD.ShowDialog() == true)
          {

              Treeview.Items.Clear();
              files = FD.SafeFileNames;
              paths = FD.FileNames;

          }

          for (int i = 0; i < files.Length; i++)
          {
              Treeview.Items.Add(files[i]);
          }


Но после того, как код запуска Treeview_selectedItemChange показать «участники Северо-Каспийского находился вне границ массива» ошибка. как я могу это исправить?

Что я уже пробовал:

private void Treeview_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
        {
               Temp = paths[Treeview.Items.IndexOf(Treeview.SelectedItem)]);

Richard MacCutchan

Скорее всего, SelectedItemIndex не был очищен, и в Treeview нет такого же количества элементов if. Поэтому сбросьте значение SelectedItemIndex перед обновлением представления.

2 Ответов

Рейтинг:
4

link1234

Спасибо. Моя проблема решена с помощью простого кода Try Catch для сброса индекса массива;
Но теперь у меня другая проблема. Я хочу перемещаться между элементом TreeView с помощью клавиатуры и кнопки, которую я определяю, но я не знаю, как изменить элемент с помощью кода behind.
для решения этой задачи я создаю Temp integer для получения индекса выбранного элемента и перемещения в массив,но таким образом элемент, выбранный в treeview, не изменяется правильным образом.
Я хочу использовать этот код для изменения видео в элементе media и из списка treeview.
Я пробую этот код, но я знаю, что это не правильный путь. пожалуйста, помогите мне.

private int TVI = 0;
    `    private void ForwardBT_Click(object sender, RoutedEventArgs e)
        {  
            try
            {
                mediaPlayer.Source = new Uri(paths[TVI]);
            }
            catch 
            {
                try
                { TVI = 0; mediaPlayer.Source = new Uri(paths[TVI]); }
                catch { }
                
            }
        }

Я хочу использовать приведенный ниже код, но теперь я не знаю, как изменить выбор элемента с помощью кнопки или клавиатуры.
mediaPlayer.Source = new Uri(paths[TreeView.Items.IndexOf(TreeView.SelectedItem)]);


Рейтинг:
1

Sandeep Mewara

Treeview_selectedItemChange Show the «Indox was out of the bounds array» error.

Ссылка: Класс IndexOutOfRangeException (System) | Microsoft Docs[^]
Цитата:
Исключение, возникающее при попытке получить доступ к элементу массива или коллекции с индексом, находящимся за его пределами.

Поскольку вы не поделились полным кодом, я могу просто предположить следующее:
1. У вас есть TreeView элемент
2. Bsaed в выбранной папке пользователя вы заполняете это дерево
3. При выборе узла этого заполненного дерева вы получаете ошибку.
Это означало бы, что вы не смогли сохранить изменение или сбросить дерево между шагами 2 и 3 - таким образом, потеряв изменение, сделанное на шаге 2. В выбранном коде изменения индекса вы будете использовать индекс, чтобы найти узел, и он сдувается.

Я считаю, что простая отладка должна дать вам представление о следующих шагах:
Учебник: отладка кода Visual Basic - Visual Studio | Microsoft Docs[^]
Первый взгляд на отладчик - Visual Studio | Microsoft Docs[^]

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