Fix iteration over filtered items

This commit is contained in:
Peter Kirmeier 2023-08-13 22:17:16 +02:00
parent a52897787e
commit 8c62122c7e
3 changed files with 8 additions and 7 deletions

View file

@ -675,7 +675,7 @@ namespace SystemTrayMenu.Business
try
{
List<RowData> rowDatas = new();
foreach (RowData rowData in menu.GetDataGridView().Items)
foreach (RowData rowData in menu.GetDataGridView().Items.SourceCollection)
{
if (rowData.Path.StartsWith($"{e.OldFullPath}"))
{
@ -741,7 +741,7 @@ namespace SystemTrayMenu.Business
foreach (RowData rowToRemove in rowsToRemove)
{
((IEditableCollectionView)dgv.Items).Remove(rowToRemove);
((List<RowData>)dgv.ItemsSource).Remove(rowToRemove);
}
menu.SelectedItem = null;
@ -770,7 +770,7 @@ namespace SystemTrayMenu.Business
rowData.HiddenEntry = hasHiddenFlag;
rowData.LoadIcon();
var items = menu.GetDataGridView().Items;
var items = (List<RowData>)menu.GetDataGridView().Items.SourceCollection;
List<RowData> rowDatas = new(items.Count + 1) { rowData };
foreach (RowData item in items)
{

View file

@ -5,6 +5,7 @@
namespace SystemTrayMenu.DataClasses
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.IO;
@ -284,7 +285,7 @@ namespace SystemTrayMenu.DataClasses
internal void OpenSubMenu()
{
// TODO: always true? maybe only when cached in WaitToLoadMenu or keyboardInput?
if (Owner?.GetDataGridView().Items.Contains(this) ?? false)
if (((List<RowData>?)Owner?.GetDataGridView().Items.SourceCollection)?.Contains(this) ?? false)
{
Menu? openSubMenu = Owner.SubMenu;

View file

@ -202,7 +202,7 @@ namespace SystemTrayMenu.UserInterface
RowDataParent.SubMenu = null;
}
foreach (RowData item in dgv.Items)
foreach (RowData item in dgv.Items.SourceCollection)
{
item.SubMenu?.Close();
}
@ -276,7 +276,7 @@ namespace SystemTrayMenu.UserInterface
{
get
{
foreach (RowData rowData in dgv.Items)
foreach (RowData rowData in dgv.Items.SourceCollection)
{
if (rowData.SubMenu != null)
{
@ -1075,7 +1075,7 @@ namespace SystemTrayMenu.UserInterface
{
// TODO: Refactor item selection to prevent running this loop
ListView lv = (ListView)sender;
foreach (RowData itemData in lv.Items)
foreach (RowData itemData in lv.Items.SourceCollection)
{
itemData.IsSelected = lv.SelectedItem == itemData;
itemData.UpdateColors();