681 B
681 B
- Each view/window follows the
.axaml+.axaml.cssplit where the code-behind constructor simply callsInitializeComponent()and leaves logic to the ViewModel. - Cross-thread UI marshalling goes exclusively through
SEngine.Dispatcher.Invoke/InvokeAsyncrather than directDispatcherusage in business code. - User-facing dialogs are surfaced to the core via
IUIInvoker.Invoke/InvokeDialog<T>by type-name reflection instead of direct window construction from non-UI assemblies. - Persistent settings are implemented by having ViewModels implement
ISettingProviderand registering handlers onOptions.SaveEvent/LoadEventto iterateBaseViewModel.Instances.