@@ -71,6 +71,7 @@ protected override void OnApplyTemplate()
7171 base . OnApplyTemplate ( ) ;
7272
7373 _detailsPresenter = ( ContentPresenter ) GetTemplateChild ( PartDetailsPresenter ) ;
74+ SetDetailsContent ( ) ;
7475
7576 SetMasterHeaderVisibility ( ) ;
7677 }
@@ -86,22 +87,23 @@ protected override void OnApplyTemplate()
8687 private static void OnSelectedItemChanged ( DependencyObject d , DependencyPropertyChangedEventArgs e )
8788 {
8889 var view = ( MasterDetailsView ) d ;
89- string noSelectionState = view . _stateGroup . CurrentState == view . _narrowState
90- ? NoSelectionNarrowState
91- : NoSelectionWideState ;
92- VisualStateManager . GoToState ( view , view . SelectedItem == null ? noSelectionState : HasSelectionState , true ) ;
90+ if ( view . _stateGroup != null )
91+ {
92+ view . SetVisualState ( view . _stateGroup . CurrentState , true ) ;
93+ }
9394
9495 view . OnSelectionChanged ( new SelectionChangedEventArgs ( new List < object > { e . OldValue } , new List < object > { e . NewValue } ) ) ;
9596
9697 // If there is no selection, do not remove the DetailsPresenter content but let it animate out.
9798 if ( view . SelectedItem != null )
9899 {
99- view . _detailsPresenter . Content = view . MapDetails == null
100- ? view . SelectedItem
101- : view . MapDetails ( view . SelectedItem ) ;
100+ view . SetDetailsContent ( ) ;
102101 }
103102
104- view . SetBackButtonVisibility ( view . _stateGroup . CurrentState ) ;
103+ if ( view . _stateGroup != null )
104+ {
105+ view . SetBackButtonVisibility ( view . _stateGroup . CurrentState ) ;
106+ }
105107 }
106108
107109 /// <summary>
@@ -140,10 +142,8 @@ private void OnLoaded(object sender, RoutedEventArgs e)
140142
141143 _narrowState = GetTemplateChild ( NarrowState ) as VisualState ;
142144
143- string noSelectionState = _stateGroup . CurrentState == _narrowState
144- ? NoSelectionNarrowState
145- : NoSelectionWideState ;
146- VisualStateManager . GoToState ( this , this . SelectedItem == null ? noSelectionState : HasSelectionState , true ) ;
145+ SetVisualState ( _stateGroup . CurrentState , true ) ;
146+ SetBackButtonVisibility ( _stateGroup . CurrentState ) ;
147147
148148 UpdateViewState ( ) ;
149149 }
@@ -174,10 +174,7 @@ private void OnVisualStateChanged(object sender, VisualStateChangedEventArgs e)
174174 SetBackButtonVisibility ( e . NewState ) ;
175175
176176 // When adaptive trigger changes state, switch between NoSelectionWide and NoSelectionNarrow.
177- string noSelectionState = e . NewState == _narrowState
178- ? NoSelectionNarrowState
179- : NoSelectionWideState ;
180- VisualStateManager . GoToState ( this , this . SelectedItem == null ? noSelectionState : HasSelectionState , false ) ;
177+ SetVisualState ( e . NewState , false ) ;
181178 }
182179
183180 /// <summary>
@@ -271,5 +268,23 @@ private void UpdateViewState()
271268 ViewStateChanged ? . Invoke ( this , after ) ;
272269 }
273270 }
271+
272+ private void SetVisualState ( VisualState state , bool animate )
273+ {
274+ string noSelectionState = state == _narrowState
275+ ? NoSelectionNarrowState
276+ : NoSelectionWideState ;
277+ VisualStateManager . GoToState ( this , SelectedItem == null ? noSelectionState : HasSelectionState , animate ) ;
278+ }
279+
280+ private void SetDetailsContent ( )
281+ {
282+ if ( ( SelectedItem != null ) && ( _detailsPresenter != null ) )
283+ {
284+ _detailsPresenter . Content = MapDetails == null
285+ ? SelectedItem
286+ : MapDetails ( SelectedItem ) ;
287+ }
288+ }
274289 }
275290}
0 commit comments