示例#1
0
        public void ShiftChart(int indexShift)
        {
            double left = 0, right = 0;

            StockSeries.GetXExtent(ref left, ref right);
            Window.UpdateScrollLimits(left, right);
            Window.SetScrollView(MinimumPos, MaximumPos);
            SetRange();
            ResetWorldRect();
        }
示例#2
0
 private void DrawStockSeries(Graphics g)
 {
     if (StockSeries != null)
     {
         GraphicsContainer container = g.BeginContainer();
         g.SetClip(CanvasRect);
         g.TranslateTransform(CanvasRect.Left, CanvasRect.Top);
         StockSeries.Draw(g, WorldRect, new Rectangle(0, 0, CanvasRect.Width, CanvasRect.Height));
         g.EndContainer(container);
     }
 }
示例#3
0
        internal bool FindYExtent(double left, double right, ref double top, ref double bottom)
        {
            var flag = false;

            if (StockSeries != null)
            {
                flag |= StockSeries.GetYExtent(left, right, ref top, ref bottom);
            }
            foreach (Series.Series s in Series)
            {
                flag |= s.GetYExtent(left, right, ref top, ref bottom);
            }
            return(flag);
        }
示例#4
0
        internal bool FindXExtent(ref double left, ref double right)
        {
            bool flag = false;

            if (StockSeries != null)
            {
                flag |= StockSeries.GetXExtent(ref left, ref right);
            }
            foreach (Series.Series s in Series)
            {
                flag |= s.GetXExtent(ref left, ref right);
            }
            return(flag);
        }
示例#5
0
        private void CreateStockSeries()
        {
            StockSeries stockSeries = StockPane.StockSeries;

            switch (ChartType)
            {
            case ChartType.Candlestick:
                StockPane.StockSeries = new CandlestickSeries("StockSymbol");
                break;

            case ChartType.OhlcBar:
                StockPane.StockSeries = new OhlcBarSeries("StockSymbol");
                break;

            case ChartType.StockLine:
                StockPane.StockSeries = new StockLineSeries("StockSymbol");
                break;
            }
            StockPane.StockSeries.CopyFrom(stockSeries);
        }
示例#6
0
        //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        //private ChartVisualSettings visualSettings;

        /// <summary>
        /// Настройки рисования
        /// </summary>
        //public ChartVisualSettings VisualSettings
        //{
        //    get { return visualSettings; }
        //    set
        //    {
        //        visualSettings = value;
        //        visualSettings.ApplyToChart(this);
        //    }
        //}

        public bool SetRange()
        {
            DateTime start = DateTime.Now, end = DateTime.Now;

            if (!StockSeries.GetTimeExtent(ref start, ref end))
            {
                return(false);
            }
            double left = 0.0, right = 0.0;

            if (!StockSeries.GetIndexRange(ref left, ref right))
            {
                return(false);
            }
            CandleRange.StartIndex = left;
            CandleRange.EndIndex   = right;
            CandleRange.Start      = start;
            CandleRange.End        = end;
            if (onScaleChanged != null)
            {
                onScaleChanged(left, right);
            }
            return(true);
        }
示例#7
0
 public CandleRange(StockSeries _stockSeries)
 {
     stockSeries = _stockSeries;
 }
示例#8
0
        public StockQueryPageViewModel(INavigationService navigationService,
                                       IProductService productService,
                                       IUserService userService,
                                       ITerminalService terminalService,
                                       IWareHousesService wareHousesService,
                                       IAccountingService accountingService,
                                       IReportingService reportingService,
                                       IDialogService dialogService
                                       ) : base(navigationService, productService, terminalService, userService, wareHousesService, accountingService, dialogService)
        {
            Title             = "库存查询";
            this.ForceRefresh = true;

            _reportingService = reportingService;

            //搜索
            this.WhenAnyValue(x => x.Filter.SerchKey)
            .Where(s => !string.IsNullOrEmpty(s))
            .Select(s => s)
            .Throttle(TimeSpan.FromSeconds(2), RxApp.MainThreadScheduler)
            .Subscribe(s => { ((ICommand)SerchCommand)?.Execute(s); })
            .DisposeWith(DeactivateWith);

            this.SerchCommand = ReactiveCommand.Create <string>(e =>
            {
                if (string.IsNullOrEmpty(Filter.SerchKey))
                {
                    this.Alert("请输入关键字!");
                    return;
                }
                ((ICommand)Load)?.Execute(null);
            });

            this.Load = StockSeriesLoader.Load(async() =>
            {
                //重载时排它
                ItemTreshold = 1;

                try
                {
                    this.StockSeries?.Clear();
                    var pending = new List <StockCategoryGroup>();
                    var results = await GetStockCategoryGroupPage(0, PageSize);
                    if (results != null && results.Any())
                    {
                        foreach (var item in results)
                        {
                            if (pending?.Count(s => s.CategoryName == item.CategoryName) == 0)
                            {
                                pending.Add(item);
                            }
                        }
                        this.TotalAmount = pending?.Select(p => p.SubCostAmount).Sum();

                        if (pending.Any())
                        {
                            this.StockSeries = new ObservableRangeCollection <StockCategoryGroup>(pending);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Crashes.TrackError(ex);
                }

                return(StockSeries);
            });


            //以增量方式加载数据
            this.ItemTresholdReachedCommand = ReactiveCommand.Create(async() =>
            {
                using (var dig = UserDialogs.Instance.Loading("加载中..."))
                {
                    try
                    {
                        int pageIdex = StockSeries?.Count ?? 0 / (PageSize == 0 ? 1 : PageSize);
                        var results  = await GetStockCategoryGroupPage(pageIdex, PageSize);
                        foreach (var item in results)
                        {
                            if (StockSeries?.Count(s => s.CategoryName == item.CategoryName) == 0)
                            {
                                StockSeries.Add(item);
                            }
                        }

                        this.TotalAmount = this.StockSeries?.Select(p => p.SubCostAmount).Sum();

                        if (results.Count() == 0 || results.Count() == StockSeries.Count)
                        {
                            ItemTreshold = -1;
                            return(this.StockSeries);
                        }
                    }
                    catch (Exception ex)
                    {
                        Crashes.TrackError(ex);
                        ItemTreshold = -1;
                    }

                    this.StockSeries = new ObservableRangeCollection <StockCategoryGroup>(StockSeries);
                    return(this.StockSeries);
                }
            }, this.WhenAny(x => x.StockSeries, x => x.GetValue().Count > 0));

            //仓库选择
            this.StockSelected = ReactiveCommand.Create <object>(async e =>
            {
                await SelectStock((data) =>
                {
                    Filter.WareHouseId   = data.Id;
                    Filter.WareHouseName = data.Name;
                    ((ICommand)Load)?.Execute(null);
                }, BillTypeEnum.None);
            });


            //绑定页面菜单
            _popupMenu = new PopupMenu(this, new Dictionary <MenuEnum, Action <SubMenu, ViewModelBase> >
            {
                //ZEROSTOCK
                { MenuEnum.ZEROSTOCK, (m, vm) => {
                      ShowZero = true;
                      ((ICommand)Load)?.Execute(null);
                  } },
示例#9
0
        public MainWindow()
        {
            InitializeComponent();

            // Create chart.
            var chart = new LightningChartUltimate();

            chart.Title.Text = "Stock Series";

            // Disable rendering before updating chart properties to improve performance
            // and to prevent unnecessary chart redrawing while changing multiple properties.
            chart.BeginUpdate();

            // Set chart control into the parent container.
            (Content as Grid).Children.Add(chart);

            // 1. Configure X- and Y-axes.

            // X-axis configuration.
            var axisX = chart.ViewXY.XAxes[0];

            axisX.Title.Text  = "Date";
            axisX.ValueType   = AxisValueType.DateTime;
            axisX.LabelsAngle = 90;
            axisX.MajorDiv    = 24 * 60 * 60; // Major division is one day in seconds.

            // Y-axis configuration.
            var axisY = chart.ViewXY.YAxes[0];

            axisY.Title.Text = "Price";

            // 2. Create a new StockSeries.
            var stockSeries = new StockSeries(chart.ViewXY, axisX, axisY);

            chart.ViewXY.StockSeries.Add(stockSeries);

            // 3. Configure the stock plot.
            stockSeries.Style            = StockStyle.OptimizedCandleStick;
            stockSeries.FillBorder.Width = 1;
            stockSeries.Title.Text       = "Example Inc.";

            // 4. Load data from a CSV file into series data points with LoadFromCSV.

            /*
             * The data in CSV file has to be organized in columns in the following order:
             * Column 0: Date (DateTime)
             * Column 1: Open (double)
             * Column 2: Close (double)
             * Column 3: High (double)
             * Column 4: Low (double)
             * Column 5: Volume (int)
             * Column 6: Transaction (double)
             */
            stockSeries.LoadFromCSV("../../../data/data.csv", SeparatorCSV.Semicolon);

            // 5. Create a reference to the loaded data points.
            var stockData = stockSeries.DataPoints;

            // 6. Generate data for series, which matches closed values.
            var closeData = new SeriesPoint[stockData.Length];

            for (var i = 0; i < stockData.Length; i++)
            {
                closeData[i] = new SeriesPoint()
                {
                    X = axisX.DateTimeToAxisValue(stockData[i].Date),
                    Y = stockData[i].Close
                };
            }

            // 7. Create a new PointLineSeries to show the dynamic in closed values on Stock Exchange.
            var lineSeries = new PointLineSeries();

            lineSeries.Title.Text = "Example Inc.";
            lineSeries.Points     = closeData;
            chart.ViewXY.PointLineSeries.Add(lineSeries);

            // 8. Auto-scale X- and Y-axes.
            chart.ViewXY.ZoomToFit();

            #region Hidden polishing
            CustomizeChart(chart);
            #endregion

            // Call EndUpdate to enable rendering again.
            chart.EndUpdate();
        }