sfChart重置图表数据

时间:2018-05-19 20:44:24

标签: xamarin.ios syncfusion

我在'详细'视图中有一个图表。在tableview中选择项目时可以访问此项。第一个图是正确的,但当我在表中选择另一个项时,它仍然显示第一个图。我启用了raispropertychangedSFChart 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(); 两次。

视图(viewDidLoad中):

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

视图模型(INIT):

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

ViewModel属性:

isOtherComponentShown

2 个答案:

答案 0 :(得分:1)

如何将模型数据传递到详细信息视图?根据您的描述,第一个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是我参考的演示。

答案 1 :(得分:0)

我无法复制您在此处说明的问题,而是根据您的要求准备了一个示例,您可以从以下链接中找到示例。

Sample

如果这不能解决您的查询,您能否将更多详细信息回复我。

希望这会有所帮助

注意:我为Syncfusion工作。