我正在寻找使用实时图表构建最佳拟合线的散点图。
现在,我这样做的方法是在主视图模型上设置SeriesCollection
,在此界面的类中我手动添加BubbleSeries
和{{ 1}}用于图表:
LineSeries
PointAnalysisViewModel:
public interface IPointAnalysisViewModel : IAnalysisViewModel
{
SeriesCollection Series
{
get;
}
}
然后,此系列在xaml中绑定到foreach (var pointSliceViewModel in this.slices)
{
this.series.Add(pointSliceViewModel.Series);
}
this.bestFitLineSeries = this.BuildBestFitLine(pointAnalysisModel.BestFitValues);
this.series.Add(this.bestFitLineSeries);
的{{1}},如下所示:
Series
非常基本的,但是这意味着在我的ViewModel系列中,我知道该视图会为我显示一个气泡系列,如下所示:
CartesianChart
对我而言,这看起来非常像一些代码'气味'因为我需要知道在View模型中查看特定对象。
我能想到的唯一可以让我分离View和ViewModel问题的方法是,如果我能够为<wpf:CartesianChart Grid.Column="1"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Series="{Binding Path=Series}" >
... UI Fluff
</wpf:CartesianChart>
提供public interface IPointSliceViewModel : IViewModel
{
IBubbleSeriesView Series
{
get;
}
bool Show
{
get;
set;
}
}
的数据模板并绑定将CartesianChart
改为Series
的集合,如下所示:
Series
这只会让我拥有:
IPointSliceViewModels
和
<wpf:CartesianChart Grid.Column="1"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
SeriesSource="{Binding Path=Series}">
<wpf:CartesianChart.SeriesTemplates>
<DataTemplate DataType={x:Type local:PointSliceViewModel}>
<wpf:BubbleSeries .../>
</DataTemplate>
</wpf:CartesianChart.SeriesTemplates>
... UI Fluff
</wpf:CartesianChart>
目前是否可以为public interface IPointAnalysisViewModel : IAnalysisViewModel
{
ObservableCollection<IPointSliceViewModel> Series
{
get;
}
}
提供public interface IPointSliceViewModel : IViewModel
{
ChartValues<ObservablePoint> Values
{
get;
}
bool Show
{
get;
set;
}
}
,还是我必须在后面的代码中手动执行此操作?
或者是否有一种不同的方式在图表中拥有可能无限数量的系列,而无需在视图中定义每个系列而无需跟踪VM中的视图特定细节?