///--------------------------------------------------------------------------------
 /// <summary>This method handles selection changes in assembly references.</summary>
 ///
 /// <param name="sender">Sender of the event.</param>
 /// <param name="e">Event arguments.</param>
 ///--------------------------------------------------------------------------------
 void ProjectReference_PropertyChanged(object sender, PropertyChangedEventArgs e)
 {
     if (sender is ProjectReferenceViewModel)
     {
         // TODO: figure out why IsSelected isn't synching up with two way binding between multi select listbox and ProjectReferenceList
         // by the time OnUpdate is called, which is the reason for this workaround method
         ProjectReferenceViewModel changedView       = sender as ProjectReferenceViewModel;
         ProjectReference          existingReference = ProjectReferenceList.Find("ReferencedProjectID", changedView.ReferencedProjectID);
         if (existingReference == null && changedView.IsSelected == true)
         {
             ProjectReferenceList.Add(changedView.ProjectReference);
         }
         else if (changedView.IsSelected == false)
         {
             ProjectReferenceList.Remove(existingReference);
         }
         ProjectReferencesModified = true;
         OnPropertyChanged("ProjectReferenceList");
         OnPropertyChanged("EditProject");
         EditProject.ResetModified(true);
     }
 }
        private async Task <string> RenderTableRows(int tabPos, RenderProperties renderProperties, ProjectReferenceList packageReferences, string outputPath, bool createFile)
        {
            var txt                        = string.Empty;
            var i                          = 1;
            var renderCount                = renderProperties.Count;
            var nugetProperties            = renderProperties.NugetProperties;
            var packageProperties          = renderProperties.PackageProperties;
            var projectReferenceProperties = renderProperties.ProjectReferenceProperties;

            foreach (var packageReference in packageReferences)
            {
                RenderLine(ref txt, ++tabPos, i % 2 == 0 ? "<tr style=\"background-color:#e9e9e9\">" : "<tr>");
                tabPos++;

                if (renderCount)
                {
                    RenderColumnTag(ref txt, tabPos, i.ToString());
                }

                var nugetValues = packageReference.NugetPackage;

                if (nugetProperties != null && nugetValues != null)
                {
                    if (nugetProperties.Id)
                    {
                        RenderColumnTag(ref txt, tabPos, nugetValues.Id);
                    }
                    if (nugetProperties.Version)
                    {
                        RenderColumnTag(ref txt, tabPos, nugetValues.Version);
                    }
                    if (nugetProperties.Description)
                    {
                        RenderColumnTag(ref txt, tabPos, nugetValues.Description);
                    }
                    if (nugetProperties.LicenseUrl)
                    {
                        RenderColumnTag(ref txt, tabPos, $"<a href=\"{nugetValues.LicenseUrl}\" target=\"blank\">{nugetValues.LicenseUrl}</a>");
                    }

                    if (nugetProperties.LicenseType)
                    {
                        var fallbackText = nugetProperties.LicenseUrl ? string.Empty : nugetValues.LicenseUrl;
                        var licenseType  = await _licenseMapper.GetLicenseType(nugetValues.LicenseUrl, fallbackText);

                        RenderColumnTag(ref txt, tabPos, $"<a href=\"{nugetValues.LicenseUrl}\" target=\"blank\">{licenseType}</a>");
                    }

                    if (nugetProperties.Authors)
                    {
                        RenderColumnTag(ref txt, tabPos, nugetValues.Authors);
                    }
                    if (nugetProperties.Owners)
                    {
                        RenderColumnTag(ref txt, tabPos, nugetValues.Owners);
                    }
                    if (nugetProperties.ProjectUrl)
                    {
                        RenderColumnTag(ref txt, tabPos, $"<a href=\"{nugetValues.ProjectUrl}\" target=\"blank\">{nugetValues.ProjectUrl}</a>");
                    }
                }

                var packageValues = packageReference.Package;

                if (packageProperties != null && packageValues != null)
                {
                    if (packageProperties.Id)
                    {
                        RenderColumnTag(ref txt, tabPos, packageValues.Id);
                    }
                    if (packageProperties.Version)
                    {
                        RenderColumnTag(ref txt, tabPos, packageValues.Version);
                    }
                    if (packageProperties.TargetFramework)
                    {
                        RenderColumnTag(ref txt, tabPos, packageValues.TargetFramework);
                    }
                }

                if (projectReferenceProperties != null)
                {
                    if (projectReferenceProperties.Name)
                    {
                        RenderColumnTag(ref txt, tabPos, packageReference.Name);
                    }
                    if (projectReferenceProperties.Version)
                    {
                        RenderColumnTag(ref txt, tabPos, packageReference.Version);
                    }
                    if (projectReferenceProperties.Culture)
                    {
                        RenderColumnTag(ref txt, tabPos, packageReference.Culture);
                    }
                    if (projectReferenceProperties.PublicKeyToken)
                    {
                        RenderColumnTag(ref txt, tabPos, packageReference.PublicKeyToken);
                    }
                    if (projectReferenceProperties.ProcessorArchitecture)
                    {
                        RenderColumnTag(ref txt, tabPos, packageReference.ProcessorArchitecture);
                    }
                    if (projectReferenceProperties.Location)
                    {
                        RenderColumnTag(ref txt, tabPos, packageReference.Location);
                    }
                    if (projectReferenceProperties.Private)
                    {
                        RenderColumnTag(ref txt, tabPos, packageReference.Private.ToString());
                    }
                    if (projectReferenceProperties.ProjectGuid)
                    {
                        RenderColumnTag(ref txt, tabPos, packageReference.ProjectGuid);
                    }
                    if (projectReferenceProperties.LicenseFiles)
                    {
                        RenderColumnTag(ref txt, tabPos, await RenderLicenseLinks(packageReference, outputPath, createFile));
                    }
                    if (projectReferenceProperties.ParentProjectName)
                    {
                        RenderColumnTag(ref txt, tabPos, packageReference.ParentProjectName);
                    }
                    if (projectReferenceProperties.ParentProjectPath)
                    {
                        RenderColumnTag(ref txt, tabPos, packageReference.ParentProjectPath);
                    }
                }

                tabPos--;
                RenderLine(ref txt, tabPos--, "</tr>");
                i++;
            }

            return(txt);
        }