Datagrid checkbox selection lost when refresh datagrid WPF MVVM <p>I have the datagrid that populated with caseRefNo,subjrMatr, Download data in it. my backgroundworker is running and return caseRefNo and Download percentage. I user DispatcherTimer to update download percentage (every 3 sec) according to caseRefNo. </p> <p>i can show download percentage in datagrid filtered by caseRefNo. The problem starts here. i cannot check my checkbox because of DispatcherTimer refresh the CollectionView that i bind to datagrid.</p> <p><a href="https://i.stack.imgur.com/8Vw3Y.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/8Vw3Y.png" alt="enter image description here"></a></p> <p>Here is my ViewModel source code.</p> <pre><code>public class DataGridDownloadViewModel:BindableBase { public ObservableCollection&lt;tblTransaction&gt; TransList { get; private set; } public DispatcherTimer dispatchTimer = new DispatcherTimer(); public CollectionView TransView { get; private set; } private String _UpdatePer; public String UpdatePercentage { get { return _UpdatePer; } set { SetProperty(ref _UpdatePer, value); } } private string _caseId; public string CaseID { get { return _caseId; } set { SetProperty(ref _caseId, value); } } public DataGridDownloadViewModel(List&lt;tblTransaction&gt; model) { dispatchTimer.Interval = TimeSpan.FromMilliseconds(3000); dispatchTimer.Tick += dispatchTimer_Tick; BackGroundThread bgT = Application.Current.Resources["BackGroundThread"] as BackGroundThread; bgT.GetPercentChanged += (ss, ee) =&gt; { UpdatePercentage = bgT.local_percentage.ToString(); }; bgT.GetCaseID += (ss, ee) =&gt; { CaseID = bgT.local_caseRef; }; TransList =new ObservableCollection&lt;tblTransaction&gt;(model); TransView = GetTransCollectionView(TransList); TransView.Filter = OnFilterTrans; var tokenSource = new CancellationTokenSource(); var token = tokenSource.Token; var cancellationTokenSource = new CancellationTokenSource(); dispatchTimer.Start(); } private void dispatchTimer_Tick(object sender, EventArgs e) { UpdateDataGrid(); } public void UpdateDataGrid() { foreach (tblTransaction tran in TransList) { if (tran.caseRefNo == CaseID) { tran.incValue = int.Parse(UpdatePercentage); tran.IsCheck = tran.IsCheck; } else { tran.incValue = tran.incValue; tran.IsCheck = tran.IsCheck; } } TransView.Refresh(); } bool OnFilterTrans(object item) { var trans = (tblTransaction)item; return true; } public CollectionView GetTransCollectionView(ObservableCollection&lt;tblTransaction&gt; tranList) { return (CollectionView)CollectionViewSource.GetDefaultView(tranList); } } </code></pre> <p>Here is my view:</p> <pre><code>&lt;Window x:Class="EmployeeManager.View.DataGridDownload" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="DataGridDownload" Height="600" Width="790"&gt; &lt;Grid&gt; &lt;DataGrid HorizontalAlignment="Left" ItemsSource="{Binding TransView}" AutoGenerateColumns="False" Margin="10,62,0,0" VerticalAlignment="Top" Height="497" Width="762"&gt; &lt;DataGrid.Columns&gt; &lt;DataGridTextColumn Header="caseRefNo" Binding="{Binding caseRefNo}" /&gt; &lt;DataGridTextColumn Header="subjMatr" Binding="{Binding subjMatr}" /&gt; &lt;DataGridTextColumn Header="Download %" Binding="{Binding incValue}" /&gt; &lt;DataGridTemplateColumn&gt; &lt;DataGridTemplateColumn.CellTemplate&gt; &lt;DataTemplate&gt; &lt;CheckBox x:Name="TestCheckBox" IsChecked="{Binding IsCheck,Mode=TwoWay}"&gt;&lt;/CheckBox&gt; &lt;/DataTemplate&gt; &lt;/DataGridTemplateColumn.CellTemplate&gt; &lt;/DataGridTemplateColumn&gt; &lt;/DataGrid.Columns&gt; &lt;/DataGrid&gt; &lt;Label Content="{Binding UpdatePercentage}" HorizontalAlignment="Left" Background="Blue" Foreground="White" Margin="10,10,0,0" VerticalAlignment="Top" Width="338" Height="30"&gt; &lt;/Label&gt; &lt;Button Content="Button" HorizontalAlignment="Left" Margin="672,20,0,0" VerticalAlignment="Top" Width="75"/&gt; &lt;/Grid&gt; </code></pre> <p></p> <p>This is my tblTransaction Model</p> <pre><code>public class tblTransaction { public string caseRefNo { get;set;} public string subjMatr { get; set; } public int incValue { get; set; } public DateTime? longTime { get; set; } private bool _ischk = false; public bool IsCheck { get { return _ischk ;} set { _ischk = value; } } } </code></pre> <p>Please guide me how to do it. any help really appreciate. df</p>