多重线序列绑定在OxyPlot
本文关键字:绑定 OxyPlot | 更新日期: 2023-09-27 18:19:01
是否可以将情节绑定到LineSeries的集合,而不是OxyPlot中的单个LineSeries ?(而不是通过模型)。
我在找这样的东西:
<oxy:Plot>
<oxy:Plot.Series>
<oxy:LineSeries ItemsSource="{Binding myCollectionOfLineSeries}" />
</oxy:Plot.Series>
</oxy:Plot>
Where myCollectionOfLineSeries is:
private ObservableCollection<LineSeries> _myCollectionOfLineSeries ;
public ObservableCollection<LineSeries> myCollectionOfLineSeries
{
get
{
return _myCollectionOfLineSeries ;
}
set
{
_myCollectionOfLineSeries = value;
OnPropertyChanged("myCollectionOfLineSeries ");
}
}
我期待答案:a)"不,这是不可能的"或者b)"是的,只要把XYZ放在IJK前面"。
这可能有点晚了,但最近我有同样的问题:我需要动态绘制多个系列(基于用户选择的货币的几个收益率曲线),但我不想直接使用PlotModel
绑定Plot
,因为其他属性(例如Title
)需要在我的视图模型中设置为代码而不是XAML标记。
所以我将PlotModel
定义为资源,将其绑定到Plot。并在视图加载时查找PlotModel。通过这种方法,我可以通过XAML标记定义可视内容(例如标题、轴、图例等),同时在视图模型代码中放入生成序列的逻辑。
<UserControl.Resources>
<oxyPlot:PlotModel
x:Key="TestPlotModel"
Title="XXX Curves (Preview)"
Subtitle="Scroll mousewheel to zoom; Right-drag to pan"
LegendPlacement="Outside"
LegendBorder="{x:Static Member=oxyPlot:OxyColors.Black}"
>
<oxyPlot:PlotModel.Axes>
<axes:LinearAxis
Title="Rate (%)"
Position="Left"
StartPosition="0"
StringFormat="#.00000"
MajorGridlineStyle="Solid"
MajorGridlineColor="{x:Static Member=oxyPlot:OxyColors.LightGray}"
MinorGridlineStyle="Dot"
MinorGridlineColor="{x:Static Member=oxyPlot:OxyColors.LightGray}"
>
</axes:LinearAxis>
<axes:LinearAxis
Title="Maturity (Days)"
Position="Bottom"
StartPosition="0"
MajorGridlineStyle="Solid"
MajorGridlineColor="{x:Static Member=oxyPlot:OxyColors.LightGray}"
>
</axes:LinearAxis>
</oxyPlot:PlotModel.Axes>
</oxyPlot:PlotModel>
</UserControl.Resources>
2) XAML - Plot
<oxy:Plot Grid.Row="1" Model="{Binding Source={StaticResource TestPlotModel}}">
</oxy:Plot>
3)视图模型-从视图中获取模型,但不绑定
protected override void OnViewLoaded(object view)
{
base.OnViewLoaded(view);
this._model = (PlotModel)((XXXView)view).FindResource("TestPlotModel");
}
4)查看模型-生成多个序列
_model.Series.Clear();
foreach (var currency in distinctCurrencies)
{
IEnumerable<DataPoint> dataPoints = ...;
LineSeries lineSeries = new LineSeries()
{
Title = String.Format("*{0}", currency),
ItemsSource = dataPoints
};
_model.Series.Add(lineSeries);
}
希望有帮助!
是的,看看他们的例子,你需要绑定到DataPoint
的集合
public ObservableCollection<DataPoint> MyCollection { ... }
和
<oxy:Plot.Series>
<oxy:LineSeries ItemsSource="{Binding MyCollection}" DataFieldX="X" DataFieldY="Y"/>
</oxy:Plot.Series>
Plot类型的Series
属性没有setter:
public Collection<Series> Series
{
get
{
return this.series;
}
}
你可以绑定到Model
属性,这是一个PlotModel
类型,有一个Series
集合属性,有一个getter和setter。查看SimpleDemo了解更多细节。
<oxy:Plot Model="{Binding MyModel}" ...