cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Anonymous
Not applicable

Reset toggle

Hello,

 

I am new to PowerApps and I am trying to use the Toggle control.  I am having an issue getting the toggle to reset to the default value when I navigate to a new screen.  For example, if I use a back arrow I'd like all the toggles to return to their default values.

 

Thanks.

1 ACCEPTED SOLUTION

Accepted Solutions
PowerApps Staff CarlosFigueira
PowerApps Staff

Re: Reset toggle

In addition to the solution sent by @KC using collections, you have a few additional options to reset the value of a toggle (or other) control - using it's Default property, and using its Reset property. In both cases, what needs to happen for the control to be notified is that the value of the property needs to change - if the value of the variable bound to the default property was set to true, for example, and you set it to true again, since nothing changed, then the control won't know that it needs to take action.

 

For example, if you have two toggle controls, whose default values are opposite. Their Default properties are set as follows:

Toggle1.Default: defValue
Toggle2.Default: !defValue

And if you want to always make the Toggle1 to be off (false) when the screen is shown, and the opposite for Toggle2, you need to make sure that the value of the `defValue` context variable is changed, which you can do by a couple of calls to UpdateContext:

Screen1.OnVisible: UpdateContext({defValue:true}); UpdateContext({defValue:false})

(In some languages, you'll need to use the two semicolons - ;; - to separate the two UpdateContext expressions)

In this case, anytime you get to the screen, the value of the context variable defValue will change (if it was false, it will become true, and then false again; if it was true the first operation doesn't do anything, but the second changes its value), and that will mean that all controls that have properties bound to that variable will be notified of its change.

 

This works, but you add a dependency between the toggle (default property) and the screen (on visible) that may not be necessary. A better alternative would be to use the Reset property in the control. This way you can set the default property of the toggles the value that you want (i.e., false on Toggle1, true on Toggle2 on the example above), and set the controls Reset property to a value that would be triggered by a screen change:

Toggle1.Default: false
Toggle1.Reset: resetToggles
Toggle2.Default: true
Toggle2.Reset: resetToggles
Screen1.OnVisible: UpdateContext({ resetToggles: true }); UpdateContext({ resetToggles: false })

In this case, since the value of the `resetToggles` context variable is changed (and momentarily becomes true), the controls will be notified that they need to be reset, and they do that by applying their default values again.

View solution in original post

9 REPLIES 9
PowerApps Staff FelixCuadrilla
PowerApps Staff

Re: Reset toggle

Hello, thanks for reaching to us.

 

I was just trying to reproduce the issue, and discovered that it's not possible to reset the default value of a toggle button even if we set a variable when the screen is visible again.

 

We are currently working to fix this issue.

KC
Level 8

Re: Reset toggle

 

You can achieve this with a Collection Variable:

On the home screen of your app create a Collection Variable in the OnVisible property of the home screen

ClearCollect(resetToggle,First(resetToggle).Value = false)

 

Set the Reset property of the Toggle button to:

First(resetToggle).Value

 

Then set the Back buttons OnSelect property to  ClearCollect(resetToggle, true)

 

Hope this helps

 

 

PowerApps Staff CarlosFigueira
PowerApps Staff

Re: Reset toggle

In addition to the solution sent by @KC using collections, you have a few additional options to reset the value of a toggle (or other) control - using it's Default property, and using its Reset property. In both cases, what needs to happen for the control to be notified is that the value of the property needs to change - if the value of the variable bound to the default property was set to true, for example, and you set it to true again, since nothing changed, then the control won't know that it needs to take action.

 

For example, if you have two toggle controls, whose default values are opposite. Their Default properties are set as follows:

Toggle1.Default: defValue
Toggle2.Default: !defValue

And if you want to always make the Toggle1 to be off (false) when the screen is shown, and the opposite for Toggle2, you need to make sure that the value of the `defValue` context variable is changed, which you can do by a couple of calls to UpdateContext:

Screen1.OnVisible: UpdateContext({defValue:true}); UpdateContext({defValue:false})

(In some languages, you'll need to use the two semicolons - ;; - to separate the two UpdateContext expressions)

In this case, anytime you get to the screen, the value of the context variable defValue will change (if it was false, it will become true, and then false again; if it was true the first operation doesn't do anything, but the second changes its value), and that will mean that all controls that have properties bound to that variable will be notified of its change.

 

This works, but you add a dependency between the toggle (default property) and the screen (on visible) that may not be necessary. A better alternative would be to use the Reset property in the control. This way you can set the default property of the toggles the value that you want (i.e., false on Toggle1, true on Toggle2 on the example above), and set the controls Reset property to a value that would be triggered by a screen change:

Toggle1.Default: false
Toggle1.Reset: resetToggles
Toggle2.Default: true
Toggle2.Reset: resetToggles
Screen1.OnVisible: UpdateContext({ resetToggles: true }); UpdateContext({ resetToggles: false })

In this case, since the value of the `resetToggles` context variable is changed (and momentarily becomes true), the controls will be notified that they need to be reset, and they do that by applying their default values again.

View solution in original post

Anonymous
Not applicable

Re: Reset toggle

Carlos,

 

Thank you for these options.  I used your last recommedation and that's exactly what I needed.

 

Regards,

JT

ersula82
Level: Powered On

Re: Reset toggle

@KC

 

I used your function and it worked but I need to tweak it slightly and I'm hoping you can help. I uploaded a gif that shows me selecting the submit button, a popup group displays. I then click the cancel button and the popup disappears and the toggles are reset using your variable. I need the toggles to reset anytime that cancel button is involved.

 

On the CheckInScreen of my app I created the collection variable in the OnVisible property of the CheckInScreen, as you suggested:

ClearCollect(resetToggle,First(resetToggle).Value = false)

 

I set the reset property of my Toggle button to:

First(resetToggle).Value

 

Then I set the Cancel button OnSelect property to UpdateContext({VarOpenPopup:false});Clear(toggleValues);ClearCollect(resetToggle, true)

 

How do I continually reset the toggle no matter how many times the popup displays and the cancel button is pressed?2018-10-24_23-14-44.gif

Highlighted
MJKjoachim
Level: Powered On

Re: Reset toggle

Hi Carlos,

 

I try to implement your solution, but I do not understand why do you set "resetToggles" true and false in a row.

Can you explain it please ?

 

Screen1.OnVisible: UpdateContext({ resetToggles: true }); UpdateContext({ resetToggles: false })
PowerApps Staff CarlosFigueira
PowerApps Staff

Re: Reset toggle

The data flow PowerApps works when values are changed. If a variable has the value of 1, and we set its value to 1, then PowerApps doesn't notify any controls that depend on it to change their values - after all, it didn't change. That's the reason why we set it to true, and then to false - to force a change in value so that the control is reset.

Notice that since this answer was posted, there's now a Reset function that you can use to reset the control, instead of relying on variables for that.

MJKjoachim
Level: Powered On

Re: Reset toggle

Thx for your explenation !

 

Actually I did like this (using Reset function of toggle control) :

 

in a filter screen (for a gallery in another screen), if no checkboxes are checked, when user validate filter selection and go back to gallery customer list screen, the toggle "filter" in this screen is reset (to false) as nothing has been selected.

 

Validate button in filter screen :

image.png

 

Toggle button properties :

image.png

 

Is there a way to reset the toggle without passing through a variable from another screen ?

 

 

Thx in advance

 

iamlee
Level 8

Re: Reset toggle

Hi Carlos, I am not really sure I understand the workaround. In my case, my user has several toggle questions and when I navigate to another it resets all the toggles. The problem is, sometimes it happens sometimes it doesn't. 

 

Is Microsoft deploying a fix soon?

Helpful resources

Announcements
thirdimage

Power Automate Community User Group Member Badge

Fill out a quick form to claim your user group badge now!

sixthImage

Power Platform World Tour

Find out where you can attend!

Power Platform 2019 release wave 2 plan

Power Platform 2019 release wave 2 plan

Features releasing from October 2019 through March 2020

fifthimage

Microsoft Learn

Learn how to build the business apps that you need.

Top Kudoed Authors
Users Online
Currently online: 181 members 4,320 guests
Please welcome our newest community members: