Я пытаюсь построить несколько элементов LineSeries
в одном элементе <oxy:PlotView />
в WPF, используя С# в Oxyplot, где я использую шаблон MVVM. Скажем, у меня есть (гипотетическая) ситуация, когда я отслеживаю автомобили с положением как функцией времени. Скажем, у меня есть следующие файлы:
- Model
- Car.cs
- View
- DisplayView.xaml
- DisplayView.xaml.cs
- ViewModel
- DisplayViewModel.cs
При инициализации я создаю три элемента автомобиля (в 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
к ранее упомянутому полю 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. Кто-нибудь может подсказать, как мне следует это исправить? Я просто недостаточно опытен (пока), чтобы поиграть с кодом, поэтому некоторые пояснения будут оценены. Какие файлы мне нужно добавить, какие методы мне нужно создать и где их создать? Возможно ли это вообще, как я себе это представляю?
С уважением,
Том