我试图在Oxyplot中使用C#在WPF中的一个LineSeries
元素中绘制多个<oxy:PlotView />
元素,其中我正在使用MVVM模式。假设我处于(假设的)情况,即我正在跟踪位置随时间变化的汽车。说我有以下文件:
在初始化时,我创建了三个汽车元素(在
DisplayViewModel.cs
:Cars = new List<Car>{ new Car(), ...};
中),它们分别具有位移与时间的关系数据PlotData = new List<DataPoint>{ new DataPoint(0,1), new DataPoint(1,4), ...};
和CarName
。DisplayView.xaml(1):
<ListBox ItemsSource="{Binding Path=Cars}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<oxy:Plot Title="{Binding CarName}" Height="400" Width="500">
<oxy:Plot.Series>
<oxy:LineSeries ItemsSource="{Binding Path=PlotData}"/>
</oxy:Plot.Series>
</oxy:Plot>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这按预期工作。它显示了带有三个(单独的)图形的
<ListBox />
。但是,这不是我要实现的目标。我想做以下事情:DisplayView.xaml(2):
<ItemsControl ItemsSource="{Binding Path=Cars}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=CarName}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这将按预期显示三个单独的汽车名称,因此我知道数据源已正确连接。但是,将此
<ItemsControl>...</ItemsControl>
元素与<oxy:Plot><oxy:Plot.Series>...</oxy:Plot.Series></oxy:Plot>
包裹在一起,并将<TextBlock />
元素更改为<oxy:LineSeries />
元素,并将其ItemsSource
属性绑定(bind)到前面提到的DataPoint
字段会产生错误A value of type 'ItemsControl' cannot be added to a collection or dictionary of type 'collection`1'.
和The specified value cannot be assigned to the collection. The following type was expected: "Series".
。DisplayView.xaml(无效):
<oxy:Plot Title="Displacement plot">
<oxy:Plot.Series>
<ItemsControl ItemsSource="{Binding Path=Cars}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<oxy:LineSeries ItemsSource="{Binding Path=PlotData}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</oxy:Plot.Series>
</oxy:Plot>
我是MVVM模式的新手-以及一般的C#和WPF编程-我看到背后的
DisplayView.xaml.cs
代码文件必须为空。使用后面的代码时,我可以使三个LineSeries在一张图中显示,但是我试图利用MVVM的功能。有人可以给我有关如何解决此问题的指示吗?我只是还没有足够的经验(尚未)来使用该代码,因此请多加解释。我需要添加哪些文件,需要创建什么方法,以及在哪里创建这些文件?按照我的设想,这是否有可能?亲切的问候,
汤姆
最佳答案
我想我掌握了这个概念(在写完这篇文章的想法和问题之后),所以我在回答自己的问题。在DisplayView.xaml
中,我添加了一个<PlotView />
:<oxy:PlotView x:Name="DisplayPlotView" Model="{Binding PlotModel}" />
。据我所知,我还在PlotModel
中创建了一个DisplayViewModel.cs
,通过MVVM模式可以正常使用。我遍历Cars
通过执行以下操作添加不同的系列:
foreach(Car car in Cars)
{
PlotModel.Series.Add(car.PlotData);
}
我现在在
PlotData
中将LineSeries
设置为Car.cs
的位置。这在一张图中显示了三行。关于c# - 您可以使用MVVM模式将多个LineSeries绑定(bind)到WPF中的氧化图吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59012546/