Xamarin.ios 图表的sfChart重置数据
我在“细节”视图中有一个图表。当在tableview中选择一个项时,将访问该项。第一个图形是正确的,但是当我在表中选择另一项时,它仍然显示第一个图形。我启用了Xamarin.ios 图表的sfChart重置数据,xamarin.ios,syncfusion,Xamarin.ios,Syncfusion,我在“细节”视图中有一个图表。当在tableview中选择一个项时,将访问该项。第一个图形是正确的,但是当我在表中选择另一项时,它仍然显示第一个图形。我启用了ListenPropertyChange=true和raispropertychange两次 视图(viewdidload): 视图模型(初始): CoinHistory=newobserveCollection(_CoinHistoryGraph.Select(x=>newchartDataModel(float.Parse(x.pric
ListenPropertyChange=true
和raispropertychange
两次
视图(viewdidload):
视图模型(初始):
CoinHistory=newobserveCollection(_CoinHistoryGraph.Select(x=>newchartDataModel(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);
}
}
private-observeCollection\u-CoinHistory;
公共可观测收集历史
{
得到
{
返回历史;
}
设置
{
_历史=价值;
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();
然后,第二个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;
}
}
公共类SecondViewModel:MvxViewModel
{
私人名单(历史);;
公共列表历史
{
得到
{
返回历史;
}
设置
{
_历史=价值;
RaisePropertyChanged(()=>CoinHistory);
}
}
公共覆盖无效准备(项参数)
{
CoinHistory=parameter.SingleCoinHistory;
}
}
最后,如果您已成功将其绑定到第二个视图模型,则详细信息视图将显示CoinHistory
这是我的演示供您参考。我无法复制您在此处陈述的问题,而是根据您的要求准备了一个样本,您可以从下面的链接中找到样本 如果这不能解决您的查询,您可以将更多详细信息回复给我 希望这有帮助
注意:我为Syncfusion工作。您在哪里调用了
CoinHistory=newobserveCollection(_CoinHistoryGraph.Select(x=>newChartDataModel(float.Parse(x.price_btc),x.timestamp))
,如果可能的话,您能提供示例让我们重现问题吗?@ColeXia MSFT我添加了viewModel属性,在初始化时它从api获取数据,并将它们写入ObservableCollection。@ColeXia MSFT这是一个示例,它是如何设置的我检查了示例,它通过每次单击事件创建CoinHistory,我认为您应该调用代码CoinHistory=newobserveCollection(_CoinHistoryGraph.Select(x=>newChartDataModel(float.Parse(x.price_btc),x.timestamp))代码>当您选择tableview项目时。@ColeXia MSFT自发布以来没有任何更改,我有类似的代码,但由于它与问题无关,我没有发布它。您检查过我的示例吗?我有不同的单元格显示不同的图形数据。
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();
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);
}
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;
}
}