diff --git a/vnext/ReactUWP/Views/PickerViewManager.cpp b/vnext/ReactUWP/Views/PickerViewManager.cpp index 0329f30aca2..b2b2af571a7 100644 --- a/vnext/ReactUWP/Views/PickerViewManager.cpp +++ b/vnext/ReactUWP/Views/PickerViewManager.cpp @@ -35,6 +35,8 @@ class PickerShadowNode : public ShadowNodeBase PickerShadowNode(); void createView() override; void updateProperties(const folly::dynamic&& props) override; + bool IsExternalLayoutDirty() const override { return m_hasNewItems; } + void DoExtraLayoutPrep(YGNodeRef yogaNode) override; private: void RepopulateItems(); @@ -42,6 +44,7 @@ class PickerShadowNode : public ShadowNodeBase folly::dynamic m_items; int32_t m_selectedIndex = -1; + bool m_hasNewItems = false; // FUTURE: remove when we can require RS5+ bool m_isEditableComboboxSupported; @@ -53,6 +56,17 @@ PickerShadowNode::PickerShadowNode() m_isEditableComboboxSupported = winrt::Windows::Foundation::Metadata::ApiInformation::IsPropertyPresent(L"Windows.UI.Xaml.Controls.ComboBox", L"IsEditableProperty"); } +void PickerShadowNode::DoExtraLayoutPrep(YGNodeRef yogaNode) +{ + if (!m_hasNewItems) + return; + + m_hasNewItems = false; + + auto comboBox = GetView().try_as(); + comboBox.UpdateLayout(); +} + void PickerShadowNode::createView() { Super::createView(); @@ -158,6 +172,7 @@ void PickerShadowNode::RepopulateItems() comboboxItem.Foreground(BrushFrom(item["textColor"])); comboBoxItems.Append(comboboxItem); } + m_hasNewItems = true; } if (m_selectedIndex < static_cast(m_items.size())) combobox.SelectedIndex(m_selectedIndex);