A part of the .NET Framework that provides a unified programming model for building line-of-business desktop applications on Windows.
Hi,
for resetting change your ViewModel:
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
using System.Windows.Input;
namespace WpfApp035
{
public class ViewModel : ICommand, INotifyPropertyChanged
{
private CollectionViewSource cvs = new();
public ICollectionView PeopleCollection
{
get
{
if (cvs.Source == null) cvs.Source = LoadData();
return cvs.View;
}
}
public People? LastItem { get; set; }
public event EventHandler? CanExecuteChanged;
public event PropertyChangedEventHandler? PropertyChanged;
#pragma warning disable CS1998, CS4014, CS8602
public bool CanExecute(object? parameter) => true;
public async void Execute(object? parameter)
{
var item = (parameter == null) ? null : (People)parameter;
LastItem = item;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(LastItem)));
Task.Factory.StartNew(() => ResetIsSelected(item));
}
private async void ResetIsSelected(People? p)
{
if (p == null) return;
await Task.Delay(1000);
p.IsSelected = false;
p.OnPropertyChanged("IsSelected");
}
private ObservableCollection<People> LoadData()
{
ObservableCollection<People> col = new();
for (int i = 1; i < 10; i++) col.Add(new People() { FirstName = $"FirstName {i}" });
return col;
}
public class People : INotifyPropertyChanged
{
public string FirstName { get; set; }
public bool IsSelected { get; set; }
public event PropertyChangedEventHandler? PropertyChanged;
internal void OnPropertyChanged([CallerMemberName] string propName = "") =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
}
}
Result: