Here are the reasons your previous attempts failed: 'false': String (always evaluates as true) 'False': String, but now it's upper-case. 0: This is a number, but in theory it should have evaluated as false unless you have a direct comparison* '{false}': This is a String, with brackets around the word "false". '{False}': This is a String, with brackets around the word "False", where the "F" has been capitalized.
What you want: false, with no quotes, not brackets, and the "f" is lower-case. Make sure to hit Enter when you're done typing false so that the value is properly committed to the field; a common issue when applying values in these fields is that the user does not properly commit the value.
*The 0 value would fail later evaluation if you have comparisons like this: {view.params.foo} = "true" or even {view.params.foo} = true because you're doing a direct equality comparison between a numeric value and either a string or boolean value. If you're passing 0/1, you have to allow for them to be evaluated as a boolean value. Supposing a foo param value of 0, you can use the numeric value as a boolean flag as long as you allow code to treat it as such.
if self.view.params.foo: # 0 will be evaluated as false-y here.
# do something
That's correct: {view.params.foo} will evaluate as true, but then you have it bound to a comparison against a string value; since true is not equal to "true", it is becoming false. Remove your binding on view.params.foo.
Hmmm. I am seeing some odd behavior as I dive deeper into this. On my end, the value I'm passing is correctly being evaluated as a boolean value, and yet reporting of the type of the value does indeed report as Unicode. I'll look into this a bit more and report back later.
This is a bug on our end. I'll spare you the technical details, but we have an open internal ticket to get it fixed. It's a fairly low priority because it's been this way for... forever, and bindings against these values still work. The primary impact is that direct references (scripting and expressions) view the params as strings.
Thank you everyone for your help with this. Unfortunately, the best solution for my particular use case has been the one I was already using, of simply creating two props, one called peramatrue, the other called permafalse and passing that in. The popup is for either creating or updating a database and is called by 2 different buttons, so this is adequate.