/// <summary>
        /// Selects a demo in the demo list
        /// </summary>
        /// <param name="demoId">ID of the selected demo</param>
        public void SelectDemo(string demoId)
        {
            if (State.SelectedDemoId == demoId)
            {
                return;
            }
            var oldState = State;

            State = State.Clone(s => s.SelectedDemoId = demoId);
            var args = new StateChangedEventArgs(oldState, State);

            AppStateChanged?.Invoke(this, args);
            SelectedDemoChanged?.Invoke(this, args);
        }
        /// <summary>
        /// Sets the list of demos
        /// </summary>
        /// <param name="demos">List of demos</param>
        public void SetDemoList(List <ComboDataItem> demos)
        {
            if (State.Demos == demos)
            {
                return;
            }
            var oldState = State;

            State = State.Clone(s => {
                s.Demos          = demos;
                s.SelectedDemoId = demos.Count > 0 ? demos[0].Id : null;
            });
            var args = new StateChangedEventArgs(oldState, State);

            AppStateChanged?.Invoke(this, args);
            DemoListChanged?.Invoke(this, args);
            SelectedDemoChanged?.Invoke(this, args);
        }