@@ -61,6 +61,8 @@ protected DetailControlModel(
61
61
62
62
// hook event handler for dependency behavior changed
63
63
_options . SelectedChanged += DependencyBehavior_SelectedChanged ;
64
+
65
+ _versions = new ItemsChangeObservableCollection < DisplayVersion > ( ) ;
64
66
}
65
67
66
68
/// <summary>
@@ -70,6 +72,8 @@ public virtual void CleanUp()
70
72
{
71
73
}
72
74
75
+ public ICollectionView VersionsView { get ; set ; }
76
+
73
77
public void Dispose ( )
74
78
{
75
79
Dispose ( disposing : true ) ;
@@ -539,16 +543,39 @@ private string GetPackageDeprecationAlternatePackageText(AlternatePackageMetadat
539
543
protected abstract Task CreateVersionsAsync ( CancellationToken cancellationToken ) ;
540
544
541
545
[ System . Diagnostics . CodeAnalysis . SuppressMessage ( "Microsoft.Design" , "CA1051:DoNotDeclareVisibleInstanceFields" ) ]
542
- protected List < DisplayVersion > _versions ;
546
+ protected ItemsChangeObservableCollection < DisplayVersion > _versions ;
543
547
544
548
// The list of versions that can be installed
545
- public List < DisplayVersion > Versions
549
+ public ItemsChangeObservableCollection < DisplayVersion > Versions
546
550
{
547
551
get { return _versions ; }
548
552
}
549
553
550
554
public virtual void OnSelectedVersionChanged ( ) { }
551
555
556
+ private string _userInput ;
557
+ public string UserInput
558
+ {
559
+ get
560
+ {
561
+ return _userInput ;
562
+ }
563
+ set
564
+ {
565
+ if ( _userInput != value )
566
+ {
567
+ _userInput = value ;
568
+
569
+ if ( Versions != null )
570
+ {
571
+ Versions . Refresh ( ) ;
572
+ }
573
+
574
+ OnPropertyChanged ( nameof ( UserInput ) ) ;
575
+ }
576
+ }
577
+ }
578
+
552
579
private DisplayVersion _selectedVersion ;
553
580
554
581
public DisplayVersion SelectedVersion
@@ -639,7 +666,7 @@ private async ValueTask SelectedVersionChangedAsync(PackageItemViewModel package
639
666
}
640
667
641
668
// Calculate the version to select among _versions and select it
642
- protected void SelectVersion ( )
669
+ protected void SelectVersion ( NuGetVersion latestVersion = null )
643
670
{
644
671
if ( _versions . Count == 0 )
645
672
{
@@ -656,12 +683,37 @@ protected void SelectVersion()
656
683
( _versions . Any ( v => v != null && ! v . IsValidVersion ) &&
657
684
_versions . IndexOf ( SelectedVersion ) > _versions . IndexOf ( _versions . FirstOrDefault ( v => v != null && ! v . IsValidVersion ) ) ) )
658
685
{
659
- // Select the installed version by default.
660
- // Otherwise, select the first version in the version list.
661
- var possibleVersions = _versions . Where ( v => v != null ) ;
662
- SelectedVersion =
663
- possibleVersions . FirstOrDefault ( v => v . Version . Equals ( _searchResultPackage . InstalledVersion ) )
664
- ?? possibleVersions . FirstOrDefault ( v => v . IsValidVersion ) ;
686
+ // The project level is the only one that has an editable combobox and we can only see one project.
687
+ if ( ! IsSolution && _nugetProjects . Count ( ) == 1 && _nugetProjects . First ( ) . ProjectStyle . Equals ( ProjectModel . ProjectStyle . PackageReference ) )
688
+ {
689
+ // For the Updates and Browse tab we select the latest version, for the installed tab
690
+ // select the installed version by default. Otherwise, select the first version in the version list.
691
+ IEnumerable < DisplayVersion > possibleVersions = _versions . Where ( v => v != null ) ;
692
+ if ( _filter . Equals ( ItemFilter . UpdatesAvailable ) || _filter . Equals ( ItemFilter . All ) )
693
+ {
694
+ SelectedVersion = possibleVersions . FirstOrDefault ( v => v . Range . OriginalString . Equals ( latestVersion . ToString ( ) , StringComparison . OrdinalIgnoreCase ) ) ;
695
+ UserInput = SelectedVersion . ToString ( ) ;
696
+ }
697
+ else
698
+ {
699
+ SelectedVersion =
700
+ possibleVersions . FirstOrDefault ( v => StringComparer . OrdinalIgnoreCase . Equals ( v . Range ? . OriginalString , _searchResultPackage ? . AllowedVersions ? . OriginalString ) )
701
+ ?? possibleVersions . FirstOrDefault ( v => v . IsValidVersion ) ;
702
+ UserInput = _searchResultPackage . AllowedVersions ? . OriginalString ?? SelectedVersion . ToString ( ) ;
703
+ }
704
+
705
+ if ( FirstDisplayedVersion == null )
706
+ {
707
+ FirstDisplayedVersion = SelectedVersion ;
708
+ }
709
+ }
710
+ else
711
+ {
712
+ var possibleVersions = _versions . Where ( v => v != null ) ;
713
+ SelectedVersion =
714
+ possibleVersions . FirstOrDefault ( v => v . Version . Equals ( _searchResultPackage . InstalledVersion ) )
715
+ ?? possibleVersions . FirstOrDefault ( v => v . IsValidVersion ) ;
716
+ }
665
717
}
666
718
}
667
719
@@ -674,10 +726,14 @@ public void ClearVersions()
674
726
if ( _versions != null )
675
727
{
676
728
_versions . Clear ( ) ;
729
+ FirstDisplayedVersion = null ;
677
730
OnPropertyChanged ( nameof ( Versions ) ) ;
678
731
}
679
732
}
680
733
734
+ // Because filtering affects the versions list, we want to display every version when it's opened the first time.
735
+ public DisplayVersion FirstDisplayedVersion { get ; set ; }
736
+
681
737
public abstract bool IsSolution { get ; }
682
738
683
739
private string _optionsBlockedMessage ;
@@ -786,6 +842,19 @@ public bool InstalledVersionIsAutoReferenced
786
842
}
787
843
}
788
844
845
+ private string _previousSelectedVersion ;
846
+ public string PreviousSelectedVersion
847
+ {
848
+ get
849
+ {
850
+ return _previousSelectedVersion ?? string . Empty ;
851
+ }
852
+ set
853
+ {
854
+ _previousSelectedVersion = value ;
855
+ }
856
+ }
857
+
789
858
protected void SetAutoReferencedCheck ( NuGetVersion installedVersion )
790
859
{
791
860
var autoReferenced = installedVersion != null
0 commit comments