@@ -16,6 +16,14 @@ public partial class MudSelectItemExtended<T> : MudComponentBase, IDisposable
1616
1717 private IMudSelectExtended ? _parent ;
1818 private MudSelectExtended < T ? > ? _registeredSelect ;
19+ private bool _hasRegisteredPresentationMetadata ;
20+ private T ? _registeredValue ;
21+ private string ? _registeredDisplayString ;
22+ private bool _registeredDisabled ;
23+ private bool _registeredIsFunctional ;
24+ private string ? _registeredHref ;
25+ private string ? _registeredClass ;
26+ private string ? _registeredStyle ;
1927
2028 internal MudSelectExtended < T ? > ? MudSelectExtended => ( MudSelectExtended < T ? > ? ) _parent ;
2129
@@ -166,18 +174,62 @@ protected override void OnParametersSet()
166174 // backed items are always transient view components; ItemCollection and selected values
167175 // are authoritative regardless of whether the visible list itself is virtualized.
168176 var shouldRegister = select != null && select . ItemCollection == null && HideContent ;
177+ var previousValue = _registeredValue ;
178+ var presentationMetadataChanged = HasRegisteredPresentationMetadataChanged ( select ) ;
169179
170180 if ( ! shouldRegister || ! ReferenceEquals ( _registeredSelect , select ) )
171181 {
172182 _registeredSelect ? . Remove ( this ) ;
173183 _registeredSelect = null ;
184+ _hasRegisteredPresentationMetadata = false ;
174185 }
175186
176187 if ( shouldRegister && _registeredSelect == null )
177188 {
178189 select ! . Add ( this ) ;
179190 _registeredSelect = select ;
191+ CaptureRegisteredPresentationMetadata ( ) ;
180192 }
193+ else if ( shouldRegister && presentationMetadataChanged )
194+ {
195+ CaptureRegisteredPresentationMetadata ( ) ;
196+
197+ if ( select ! . IsSelectedPresentationValue ( previousValue ) ||
198+ select . IsSelectedPresentationValue ( Value ) )
199+ {
200+ select . MarkDeclarativePresentationDirty ( ) ;
201+ }
202+ }
203+ }
204+
205+ private bool HasRegisteredPresentationMetadataChanged ( MudSelectExtended < T ? > ? select )
206+ {
207+ if ( ! _hasRegisteredPresentationMetadata )
208+ return false ;
209+
210+ var valueChanged = select == null
211+ ? ! EqualityComparer < T ? > . Default . Equals ( _registeredValue , Value )
212+ : ! select . PresentationValuesEqual ( _registeredValue , Value ) ;
213+
214+ return valueChanged
215+ || _registeredDisplayString != DisplayString
216+ || _registeredDisabled != Disabled
217+ || _registeredIsFunctional != IsFunctional
218+ || _registeredHref != Href
219+ || _registeredClass != Class
220+ || _registeredStyle != Style ;
221+ }
222+
223+ private void CaptureRegisteredPresentationMetadata ( )
224+ {
225+ _registeredValue = Value ;
226+ _registeredDisplayString = DisplayString ;
227+ _registeredDisabled = Disabled ;
228+ _registeredIsFunctional = IsFunctional ;
229+ _registeredHref = Href ;
230+ _registeredClass = Class ;
231+ _registeredStyle = Style ;
232+ _hasRegisteredPresentationMetadata = true ;
181233 }
182234
183235 /// <summary>
0 commit comments