sfChart 为图形重置数据
sfChart reset data for graph
我在 'detail' 视图中有一个图表。当在 table 视图中选择一个项目时会访问它。第一张图是正确的,但是当我在 table 中选择另一个项目时,它仍然显示第一张图。我启用了 ListenPropertyChange = true
和 raispropertychanged
两次。
视图(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.
中找到该样本
如果这不能解决您的问题,您能否回复我并提供更多详细信息。
希望对您有所帮助
注意:我为 Syncfusion 工作。
我在 'detail' 视图中有一个图表。当在 table 视图中选择一个项目时会访问它。第一张图是正确的,但是当我在 table 中选择另一个项目时,它仍然显示第一张图。我启用了 ListenPropertyChange = true
和 raispropertychanged
两次。
视图(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.
中找到该样本如果这不能解决您的问题,您能否回复我并提供更多详细信息。
希望对您有所帮助
注意:我为 Syncfusion 工作。