async Task OnRefreshed(ITradingView sender, ViewRefreshType viewRefreshType)
 {
     foreach (var item in _refreshedEvents)
     {
         var t = item(sender, viewRefreshType);
         if (t != null)
         {
             await t;
         }
     }
 }
        public async Task RefreshAsync(ViewRefreshType viewRefreshType = ViewRefreshType.NotReloadIfCached)
        {
            await OnRefreshing(this, viewRefreshType);

            var    ctx       = XWV.ThreadSync.Invoke(() => TypedContext);
            string ctxJson   = null;
            var    chartJson = JsonConvert.SerializeObject(ctx.Chart);
            var    titleJson = JsonConvert.SerializeObject(ctx.Title);
            var    colors    = JsonConvert.SerializeObject(ctx.Colors);

            if (viewRefreshType == ViewRefreshType.NotReloadIfCached)
            {
                ctxJson = JsonConvert.SerializeObject(ctx);
                if (ctxJson == _previousRefreshJson)
                {
                    return;
                }
            }

            var script = $@"
TradingVueObj.titleTxt = {titleJson} ;
TradingViewContext.chart = {chartJson} ;
TradingViewContext.colors = {colors} ;
";
            await XWV.WaitInitialization();

            if (viewRefreshType == ViewRefreshType.ReloadAllPage)
            {
                await LoadPage();
            }
            else
            {
                await LoadPageIfNotLoaded();
            }
            await XWV.ExJs <object>(script);

            _previousRefreshJson = ctxJson;
            await OnRefreshed(this, viewRefreshType);
        }