From 2aeb1e99e27266b035a1bfc8474dedf8f80fc3e5 Mon Sep 17 00:00:00 2001 From: kenander Date: Mon, 3 Jun 2019 09:08:11 -0700 Subject: [PATCH 1/2] Forcing layout after adding new items to Picker --- vnext/ReactUWP/Views/PickerViewManager.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/vnext/ReactUWP/Views/PickerViewManager.cpp b/vnext/ReactUWP/Views/PickerViewManager.cpp index 0329f30aca2..4dddeec0301 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_newItems; } + 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_newItems = 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_newItems) + return; + + m_newItems = 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_newItems = true; } if (m_selectedIndex < static_cast(m_items.size())) combobox.SelectedIndex(m_selectedIndex); From 6836fc42e659bd6acce8c91c8c73090b2c0028ac Mon Sep 17 00:00:00 2001 From: Ken Anderson Date: Thu, 6 Jun 2019 16:36:48 -0700 Subject: [PATCH 2/2] Suggested code review change. --- vnext/ReactUWP/Views/PickerViewManager.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/vnext/ReactUWP/Views/PickerViewManager.cpp b/vnext/ReactUWP/Views/PickerViewManager.cpp index 4dddeec0301..b2b2af571a7 100644 --- a/vnext/ReactUWP/Views/PickerViewManager.cpp +++ b/vnext/ReactUWP/Views/PickerViewManager.cpp @@ -35,7 +35,7 @@ class PickerShadowNode : public ShadowNodeBase PickerShadowNode(); void createView() override; void updateProperties(const folly::dynamic&& props) override; - bool IsExternalLayoutDirty() const override { return m_newItems; } + bool IsExternalLayoutDirty() const override { return m_hasNewItems; } void DoExtraLayoutPrep(YGNodeRef yogaNode) override; private: @@ -44,7 +44,7 @@ class PickerShadowNode : public ShadowNodeBase folly::dynamic m_items; int32_t m_selectedIndex = -1; - bool m_newItems = false; + bool m_hasNewItems = false; // FUTURE: remove when we can require RS5+ bool m_isEditableComboboxSupported; @@ -58,10 +58,10 @@ PickerShadowNode::PickerShadowNode() void PickerShadowNode::DoExtraLayoutPrep(YGNodeRef yogaNode) { - if (!m_newItems) + if (!m_hasNewItems) return; - m_newItems = false; + m_hasNewItems = false; auto comboBox = GetView().try_as(); comboBox.UpdateLayout(); @@ -172,7 +172,7 @@ void PickerShadowNode::RepopulateItems() comboboxItem.Foreground(BrushFrom(item["textColor"])); comboBoxItems.Append(comboboxItem); } - m_newItems = true; + m_hasNewItems = true; } if (m_selectedIndex < static_cast(m_items.size())) combobox.SelectedIndex(m_selectedIndex);