public void InvalidateErrors()
{
var allErrors = new List<ErrorViewModel>();
var toRemove = new List<ErrorViewModel>();
var hasChanged = false;
foreach (var document in DocumentTabs.Documents.OfType<EditorViewModel>())
{
if (document.Model.CodeAnalysisResults != null)
{
foreach (var diagnostic in document.Model.CodeAnalysisResults.Diagnostics)
{
var error = new ErrorViewModel(diagnostic);
var matching = allErrors.FirstOrDefault(err => err.IsEqual(error));
if (matching == null)
{
allErrors.Add(error);
}
}
}
}
foreach (var error in ErrorList.Errors)
{
var matching = allErrors.SingleOrDefault(err => err.IsEqual(error));
if (matching == null)
{
toRemove.Add(error);
}
}
foreach (var error in toRemove)
{
hasChanged = true;
ErrorList.Errors.Remove(error);
}
foreach (var error in allErrors)
{
var matching = ErrorList.Errors.SingleOrDefault(err => err.IsEqual(error));
if (matching == null)
{
hasChanged = true;
ErrorList.Errors.Add(error);
}
}
if (hasChanged)
{
BottomTabs.SelectedTool = ErrorList;
}
}