System.Windows.Controls.ComboBox.UpdateDisplayedItem C# (CSharp) Method

UpdateDisplayedItem() private method

private UpdateDisplayedItem ( object selectedItem ) : void
selectedItem object
return void
		void UpdateDisplayedItem (object selectedItem)
		{
			object content;

			// Can't do anything with no content presenter
			if (_contentPresenter == null)
				return;

			// Return the currently displayed object (which is a UIElement)
			// to its original container.
			if (DisplayedItem != null) {
				content = _contentPresenter.Content;
				DisplayedItem.Content = content;
				DisplayedItem = null;
			}
			_contentPresenter.Content = null;

			if (selectedItem == null) {
				_contentPresenter.Content = NothingSelectedFallback;
				_contentPresenter.ContentTemplate = null;
				SelectionBoxItem = null;
				SelectionBoxItemTemplate = null;
				return;
			}

			// If the currently selected item is a ComboBoxItem (not ListBoxItem!), we
			// display its Content instead of the CBI itself.
			content = selectedItem;
			if (content is ComboBoxItem)
				content = ((ComboBoxItem) content).Content;

			// Only allow DisplayedItem to be non-null if we physically move
			// its content. This will only happen if DisplayedItem == SelectedItem
			DisplayedItem = ItemContainerGenerator.ContainerFromIndex (SelectedIndex) as ComboBoxItem;

			SelectionBoxItem = content;
			SelectionBoxItemTemplate = ItemTemplate;

			// If displayed item is avaiable, we can get the right template from there. Otherwise
			// we need to create a container, read the template and destroy it.
			if (DisplayedItem != null) {
				SelectionBoxItemTemplate = DisplayedItem.ContentTemplate;
				if (content is UIElement)
					DisplayedItem.Content = null;
				else
					DisplayedItem = null;
			} else {
				bool fresh;
				ComboBoxItem container = ItemContainerGenerator.ContainerFromIndex (SelectedIndex) as ComboBoxItem;
				if (container == null) {
					var index = ItemContainerGenerator.GeneratorPositionFromIndex (SelectedIndex);
					using (ItemContainerGenerator.StartAt (index, GeneratorDirection.Forward, true))
						container = ItemContainerGenerator.GenerateNext (out fresh) as ComboBoxItem;
					ItemContainerGenerator.PrepareItemContainer (container);
				}
				SelectionBoxItemTemplate = container.ContentTemplate;
			}

			_contentPresenter.Content = SelectionBoxItem;
			_contentPresenter.ContentTemplate = SelectionBoxItemTemplate;
		}