CmdPal: Add null check before caching view model for item (#45815)

This commit is contained in:
Jiří Polášek
2026-02-27 18:20:19 +01:00
committed by GitHub
parent e653b4ad37
commit 8c1e4f16fe

View File

@@ -227,32 +227,44 @@ public partial class ListViewModel : PageViewModel, IDisposable
var reused = 0;
foreach (var item in newItems)
{
// Check for cancellation during item processing
if (cancellationToken.IsCancellationRequested)
try
{
return;
if (item is null)
{
continue;
}
// Check for cancellation during item processing
if (cancellationToken.IsCancellationRequested)
{
return;
}
if (_vmCache.TryGetValue(item, out var existing))
{
existing.LayoutShowsTitle = showsTitle;
existing.LayoutShowsSubtitle = showsSubtitle;
newViewModels.Add(existing);
reused++;
continue;
}
var viewModel = new ListItemViewModel(item, new(this), _contextMenuFactory);
// If an item fails to load, silently ignore it.
if (viewModel.SafeFastInit())
{
viewModel.LayoutShowsTitle = showsTitle;
viewModel.LayoutShowsSubtitle = showsSubtitle;
_vmCache[item] = viewModel;
newViewModels.Add(viewModel);
created++;
}
}
if (_vmCache.TryGetValue(item, out var existing))
catch (Exception ex)
{
existing.LayoutShowsTitle = showsTitle;
existing.LayoutShowsSubtitle = showsSubtitle;
newViewModels.Add(existing);
reused++;
continue;
}
var viewModel = new ListItemViewModel(item, new(this), _contextMenuFactory);
// If an item fails to load, silently ignore it.
if (viewModel.SafeFastInit())
{
viewModel.LayoutShowsTitle = showsTitle;
viewModel.LayoutShowsSubtitle = showsSubtitle;
_vmCache[item] = viewModel;
newViewModels.Add(viewModel);
created++;
CoreLogger.LogError("Failed to load item:\n", ex + ToString());
}
}