sfChart 为图形重置数据

sfChart reset data for graph

我在 'detail' 视图中有一个图表。当在 table 视图中选择一个项目时会访问它。第一张图是正确的,但是当我在 table 中选择另一个项目时,它仍然显示第一张图。我启用了 ListenPropertyChange = trueraispropertychanged 两次。

视图(viewdidload):

SFChart chart = new SFChart();
        chart.Frame = this.headerview.Frame;

        //Adding Primary Axis for the Chart.
        SFCategoryAxis primaryAxis = new SFCategoryAxis();
        chart.PrimaryAxis = primaryAxis;

        //Adding Secondary Axis for the Chart.
        SFNumericalAxis secondaryAxis = new SFNumericalAxis();
        chart.SecondaryAxis = secondaryAxis;

        SFLineSeries series = new SFLineSeries()
        {
            XBindingPath = "timestamp",

            YBindingPath = "price_btc",

            ListenPropertyChange = true
        };
        series.EnableTooltip = true;
        chart.Series.Add(series);
        set.Bind(series).For(s => s.ItemsSource).To(vm => vm.CoinHistory);
        set.Apply();

视图模型(初始化):

CoinHistory = new ObservableCollection<ChartDataModel>(_CoinHistoryGraph.Select(x => new ChartDataModel(float.Parse(x.price_btc), x.timestamp)));
        RaisePropertyChanged(() => CoinHistory);

ViewModel 属性:

  private ObservableCollection<ChartDataModel> _CoinHistory;
    public ObservableCollection<ChartDataModel> CoinHistory
    {
        get
        {
            return _CoinHistory;
        }
        set
        {
            _CoinHistory = value;
            RaisePropertyChanged(() => CoinHistory);
        }
    }

如何将模型数据传递到详细信息视图?根据您的描述,第一个 ViewModel 应该包含整个数据。当用户单击一个单元格时,将触发 tableView 源的 SelectionChangedCommand 事件。一般我们把这个命令绑定到对应的ViewModel的命令上,然后我们就可以在那里配置推送和传参了。

这是我在第一个视图中的绑定,其中包含 UITableView:

var set = this.CreateBindingSet<FirstView, FirstViewModel>();

set.Bind(source).For(s => s.ItemsSource).To(vm => vm.ItemsGroup);
set.Bind(source).For(s => s.SelectionChangedCommand).To(vm => vm.ShowDetailsCommand);

set.Apply();

当用户单击 TableView 中的一个单元格时,ShowDetailsCommand 将在 FirstViewModel:

中触发
private readonly Lazy<IMvxNavigationService> _navigationService = new Lazy<IMvxNavigationService>(Mvx.Resolve<IMvxNavigationService>);

private MvxCommand<Item> showDetailsCommand;
public ICommand ShowDetailsCommand
{
    get
    {
        return showDetailsCommand ?? (showDetailsCommand = new MvxCommand<Item>(showDetails));
    }
}
async void showDetails(Item item)
{
    // This item is bound to the ItemsSource through ItemsGroup
    await _navigationService.Value.Navigate<SecondViewModel, Item>(item);
}

然后第二个 ViewModel 可以通过以下方式接受此项:

public class SecondViewModel : MvxViewModel<Item>
{
    private List<CoinHistoryModel> _CoinHistory;

    public List<CoinHistoryModel> CoinHistory
    {
        get
        {
            return _CoinHistory;
        }
        set
        {
            _CoinHistory = value;
            RaisePropertyChanged(() => CoinHistory);
        }
    }

    public override void Prepare(Item parameter)
    {
        CoinHistory = parameter.SingleCoinHistory;
    }
}

最后细节视图会显示CoinHistory,如果你已经成功绑定到第二个视图模型。

Here是我的demo给大家参考。

我无法复制您在此处陈述的问题,而是根据您的要求准备了一个样本,您可以从下面的 link.

中找到该样本

Sample

如果这不能解决您的问题,您能否回复我并提供更多详细信息。

希望对您有所帮助

注意:我为 Syncfusion 工作。