问题描述
我正在处理的项目有一个日期过滤器和一个图表,可以通过一个按钮将 PrimaryAxis(the x) 更改为天、月或年,如下所示: enter image description here
但是,当我看到 DAY 数据(例如移动到列或缩放)并想单击 MONTH 按钮时,PrimaryAxis 中的 IntervalType 几个月不会改变,它会停留在几天内。但有趣的是:当我按下图表中的一列时,它会正确更新数月。
这是一个视频,展示了发生的事情: https://drive.google.com/file/d/1KQTE3JBDUG-cin17bchrXN7OlwDrXI5C/view?usp=sharing
xml:
<Frame Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="3" HasShadow="False" HeightRequest="250" Padding="10" CornerRadius="20">
<StackLayout Orientation="Vertical" Spacing="0" VerticalOptions="FillAndExpand
<chart:SfChart
BindingContext="{Binding viewmodel}"
VerticalOptions="FillAndExpand"
BackgroundColor="White"
Grid.Row="2"
IsEnabled="{Binding IsBusy,Converter={StaticResource InverseBoolConverter}}">
<chart:SfChart.Title>
<chart:ChartTitle Text="{local:Translate EnergyChartTitle}" FontFamily="{StaticResource OpenSans-SemiBold}"
FontSize="16" TextColor="{StaticResource LightBlue}" Margin="3,3,23"/>
</chart:SfChart.Title>
<chart:SfChart.ChartBehaviors>
<chart:ChartZoomPanBehavior EnableDoubleTap="False" EnableZooming="False"/>
<chart:ChartTooltipBehavior Duration="5"/>
</chart:SfChart.ChartBehaviors>
<chart:SfChart.PrimaryAxis>
<chart:DateTimeAxis ShowMajorGridLines="False" ShowMinorGridLines="False" IntervalType="{Binding EnergyIntervalUnit}" Interval="1" AutoScrollingDelta="12"
AutoScrollingDeltaType="{Binding EnergyScrollingMode}" EnableAutoIntervalOnZooming="True" AutoScrollingMode="Start">
<chart:DateTimeAxis.Title>
<chart:ChartAxisTitle Text="{local:Translate DateLabel}" FontSize="15" Margin="2"/>
</chart:DateTimeAxis.Title>
</chart:DateTimeAxis>
</chart:SfChart.PrimaryAxis>
<chart:SfChart.SecondaryAxis>
<chart:NumericalAxis MinorTicksPerInterval="1" ShowMinorGridLines="False">
<chart:NumericalAxis.Title>
<chart:ChartAxisTitle Text="{local:Translate EnergyWhAxisLabel}" FontSize="15" Margin="2"/>
</chart:NumericalAxis.Title>
</chart:NumericalAxis>
</chart:SfChart.SecondaryAxis>
<chart:SfChart.Series>
<chart:ColumnSeries ItemsSource="{Binding EnergyGraphDataList}"
XBindingPath="Date"
YBindingPath="Value"
Enabletooltip="True"
strokeColor="{StaticResource GraphBlue}"
Color="{StaticResource GraphBlue}"/>
</chart:SfChart.Series>
</chart:SfChart>
</StackLayout>
</Frame>
这是按钮的工作原理:
private void BetweenYearsTapped()
{
IsBusy = true;
SelectedFilter = ButtonFilterType.BetweenYears;
EnergyIntervalUnit = DateTimeIntervalType.Years;
EnergyScrollingMode = DatetimedeltaType.Years;
EnergyGraphDataList.Clear();
if (EnergyData.EnergyDataYear != null && EnergyData.EnergyDataYear.Count > 0)
{
foreach (var item in EnergyData.EnergyDataYear)
{
var convertedMarker = Utils.Staticmethods.ConvertMarkerToDateTime(item.Marker);
if (convertedMarker >= SelectedPickerOptionA.AddYears(-1) &&
convertedMarker.Year <= SelectedPickerOptionB.Year && item.Delta.EGrid > 0)
EnergyGraphDataList.Add(new DateContinuousData() { Date = convertedMarker,Value = ((double)item.Delta.EGrid / 1000) });
}
}
if (EnergyGraphDataList.Count == 0)
{
EmptyChart = true;
}
else
{
EmptyChart = false;
}
IsBusy = false;
}
private void YearTapped()
{
IsBusy = true;
SelectedFilter = ButtonFilterType.Year;
EnergyIntervalUnit = DateTimeIntervalType.Months;
EnergyScrollingMode = DatetimedeltaType.Months;
EnergyGraphDataList.Clear();
if (EnergyData.EnergyDataMonth != null && EnergyData.EnergyDataMonth.Count > 0)
{
foreach (var item in EnergyData.EnergyDataMonth)
{
var convertedMarker = Utils.Staticmethods.ConvertMarkerToDateTime(item.Marker);
if (convertedMarker >= SelectedPickerOptionA.AddMonths(-12) &&
convertedMarker <= SelectedPickerOptionB && item.Delta.EGrid > 0)
EnergyGraphDataList.Add(new DateContinuousData() { Date = convertedMarker,Value = ((double)item.Delta.EGrid / 1000) });
}
}
if (EnergyGraphDataList.Count == 0)
{
EmptyChart = true;
}
else
{
EmptyChart = false;
}
IsBusy = false;
}
private void MonthTapped()
{
IsBusy = true;
SelectedFilter = ButtonFilterType.Month;
EnergyGraphDataList.Clear();
if (EnergyData.EnergyDataDay != null && EnergyData.EnergyDataDay.Count > 0)
{
foreach (var item in EnergyData.EnergyDataDay)
{
var convertedMarker = Utils.Staticmethods.ConvertMarkerToDateTime(item.Marker);
if (convertedMarker >= SelectedPickerOptionA &&
convertedMarker <= SelectedPickerOptionB && item.Delta.EGrid > 0)
EnergyGraphDataList.Add(new DateContinuousData() { Date = convertedMarker,Value = ((double)item.Delta.EGrid / 1000) });
}
}
EnergyIntervalUnit = DateTimeIntervalType.Days;
EnergyScrollingMode = DatetimedeltaType.Days;
if (EnergyGraphDataList.Count == 0)
{
EmptyChart = true;
}
else
{
EmptyChart = false;
}
IsBusy = false;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)