In my experience this is usually caused by bad markup or errors thrown within your components. Keep an eye out at your log console and in addition, hook into bind/attached and unbind/detached in saas-encounter-detail and log something to the console. Make sure that these methods are being called when you expect them to be called and if not, that helps in narrowing down the issue.
Alternatively you can use show.bind to simply reuse 1 instance and have its visibility toggled. Another trick is to try and force the container to invalidate, something like: <template repeat.for="state of [isEditMode]"><saas-encounter-detail if.bind="isEditMode></template>
These workarounds are useful in case you don’t own the component in question but should never be preferred
Well, unbind should get called when isEditMode changes to false, so next up would be to verify that, you could use the aurelia browser extension which works great for this purpose or simply throw a <h1>Edit mode: ${isEditMode}</h1> in there. If that seems to work correctly then you might be hitting a separate issue and a repo would be welcome
unbind is not needed to be called explicitly. Im not sure how your actual code looks like, but keep in mind that if view is cached. So that constructor of <sass-counter-detail/> will only be called once. bind/unbind will be called repeatedly as the value of [if] changes.
If you don’t wanna cache the view of [if] attribute, then you can do: