可能有点晚了,但最近我有同样的问题:我需要动态绘制多个系列(基于用户选择的货币的几条收益率曲线),但我不想直接绑定Plot
using PlotModel
,作为其他属性(例如Title
)需要在我的视图模型中设置为代码而不是 XAML 标记。
所以我将其定义PlotModel
为资源,将其绑定到 Plot。并在加载视图时查找 PlotModel。通过这种方法,我可以通过 XAML 标记定义视觉内容(例如标题、轴、图例等),同时在我的视图模型代码中放置生成系列的逻辑。
不确定这是否是一个好方法,但它解决了我的问题。
1) 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);
}
希望能帮助到你!