使用Syncfusion.SfChart向下一个手势添加滑动

时间:2019-02-21 11:33:52

标签: xamarin xamarin.forms

当前,在我的应用程序中,当用户选择“症状”时,他们将被定向到详细信息页面,该页面显示其症状图表以及来自所选症状的填充反馈数据。

这是我可以添加轻扫手势的一种方式,使用户可以轻扫到下一个症状图表,而不必返回到主要症状页面并选择症状。

目前,这就是我填充图表的方式:

public async Task GetSymptomFeedback(string id)
    {

        SymptomFeedbackData.Clear();
        symptomChart.Series.Clear();



        BusyIndicator.IsRunning = true;
        SymptomFeedbackData = await symptomsfeedbackmanager.getUserSymptomFeedback(id);



        foreach (var FeedbackItem in SymptomFeedbackData)
        {

            FeedbackItem.Idusersymptomid =  FeedbackItem.Id + ',' + FeedbackItem.Usersymptomid;


        }

        IEnumerable<SymptomFeedback> OrdreredFeedbackData =  SymptomFeedbackData.OrderBy(X => X.DateTime);

        LineSeries columnseries = new LineSeries
        {
            ItemsSource = OrdreredFeedbackData,
            XBindingPath =  "DateTime",
            YBindingPath = "Intensity",

            DataMarker = new ChartDataMarker
            {
                ShowLabel = true,
                ShowMarker = true,
                MarkerHeight = 5,
                MarkerWidth = 5,
                MarkerColor = Xamarin.Forms.Color.Purple
            }

        };






        BusyIndicator.IsRunning = false;



        symptomChart.PrimaryAxis.ShowTrackballInfo = true;


        if (columnseries.ItemsSource != null)
        {
            symptomChart.Series.Add(columnseries);
        }


        symptomChart.ChartBehaviors.Add(new ChartTrackballBehavior());

        //Sort Collection by datetime 



        SymptomsList.ItemsSource = OrdreredFeedbackData.Reverse(); 


    }

1 个答案:

答案 0 :(得分:0)

解决方案:

通过您的代码,我们可以看到您通过症状的id查询数据。因此,我想当您从id转到detail page时,您将此main symptoms page作为参数传递。

  

这是我可以添加滑动手势以允许用户滑动到的方式   下一个症状表,而无需返回主要症状页面   并选择一种症状。

此外,您可以将所有症状ID的array传递到详细信息页面。我们将此数组命名为symptomIdArray

然后将SwipeGestureRecognizer添加到视图中。

    var DownSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Down };
    var UpSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Up };

    DownSwipeGesture.Swiped += OnSwiped;
    UpSwipeGesture.Swiped += OnSwiped;

    this.Content.GestureRecognizers.Add(DownSwipeGesture);
    this.Content.GestureRecognizers.Add(UpSwipeGesture);

OnSwiped中,您可以通过lastnext获得symptomIdArraycurrentID的ID,然后可以选择重新加载当前页面或转到新页面以滑动到下一个症状表,这是代码:

  public Array symptomIdArray; // ids of all symptom

  public string currentID; // You selected id of current symptom

    void OnSwiped(object sender, SwipedEventArgs e)
            {

                int index = Array.IndexOf(symptomIdArray, currentID);

                switch (e.Direction)
                {
                    case SwipeDirection.Up:

                        if (index ==0)
                        {
                            //first one
                            break;
                        }

                        string lastID = (string)symptomIdArray.GetValue(index-1);

                        //1.You can refresh current page with lastId
                        GetSymptomFeedback(lastID);

                        //2.You can go to a new page with lastID ID and symptomIdArray
                        Navigation.PushAsync(new NewPage(lastID, symptomIdArray));

                        break;

                    case SwipeDirection.Down:
                        // Handle the swipe

                        if (index ==  symptomIdArray.Length-1)
                        {
                            //Last one,  no more

                            break;
                        }

                        string nextID = (string)symptomIdArray.GetValue(index+1);

                        //1.You can refresh current page with next currentID
                        GetSymptomFeedback(nextID);


                        //2.You can go to a new page with nextID ID and symptomIdArray
                        Navigation.PushAsync(new NewPage(nextID, symptomIdArray));

                        break;
                }
            }

更新

添加SwipeGestureRecognizer

            SfChart chart = new SfChart();
            chart.Title.Text = "Chart";

            //Config chart....
            ...


            chart.Series.Add(series);
            this.Content = chart;

            var DownSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Down };
            var UpSwipeGesture = new SwipeGestureRecognizer { Direction = SwipeDirection.Up };

            DownSwipeGesture.Swiped += OnSwiped;
            UpSwipeGesture.Swiped += OnSwiped;

            chart.GestureRecognizers.Add(DownSwipeGesture);
            chart.GestureRecognizers.Add(UpSwipeGesture);

还有onSwipe

void OnSwiped(object sender, SwipedEventArgs e)
    {
            switch (e.Direction)
            {
                case SwipeDirection.Up:
                Console.WriteLine("up");
                    break;

                case SwipeDirection.Down:
                Console.WriteLine("down");

                break;
            }
    }

如果您有任何问题,请告诉我。