A lot of this is just samples work, so skip on down to `src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/ActionBarViewModel.cs`.
* Updates the Action Bar with the title of the currently active page when we navigate to it
* listens for PropChanged events from `ICommandItem`s in lists and on `IPage`'s (to display a loading bar)
* Also didn't put this on the ShellPage quite yet, because the diff was already massive, and there's complicated "are _we_ loading the page? did the `IPage` say it was loading?" plumbing that needs to be done.
* adds rudimentary support for showing an exception, if there's an error we catch
* I didn't add log this everywhere yet though, since we're not 100% confident on the messaging infrastructure here
* I decided against putting this on the shell page, because I want users to be able to _go back_ from a page with an exception, and that didn't seem trivial if it was on the shellpage itself
* Then updates a bunch of extensions to better utilize the loading state.
* Then discovers a really weird bug with event callbacks in WinRT, so I decided to wrap those in try/catches to have extensions explode less often. (#181)
* Then also adds a bunch of "evil" samples, to make a unified place of "things to try and break us"
ref #73
---------
Co-authored-by: Mike Griese <zadjii@gmail.com>
Targets both #175 (which targets #171), and #172, so the delta is very sloppy.
There's also some sloppy bits of delta here where I tried to see if the single-instance thing fixed the RoOriginate thing.
I'm gonna try to tidy all this up a bit.
Refs #73
_targets #171_
This is the direction I was thinking with the comments in https://github.com/zadjii-msft/PowerToys/issues/73#issuecomment-2496004179.
Mainly,
* I'm making sure that ViewModels which wrap up some extension object all have a local copy of their data.
* They all use an `async Task InitializePropertiesAsync()` to retrieve their properties from the extension itself.
* Beyond the `ExtensionObject` they own, they only keep around _other view models_.
I did this for `ListItem` and `CommandContextItem` currently. They both inherit from `CommandItemViewModel`, so they're really all doing the same thing.
If this seems like the direction we want to go, I can tidy up ListPage too, and keep wrapping up more extension objects like this.
The BODGY thing I'm doing here is
```cs
viewModel.InitializePropertiesAsync().ContinueWith(t => { /*TODO this feels dirty*/ });
```
in `ListViewModel.cs`. Basically just yeeting off a task to load the properties for the item (separately for each item?!). Feels DEFINITELY wrong.