Нужно построить график, который похож на тот, что показывает загрузку процессора в TaskManager (CPU usage history) с помощью паттерна MVVM. В качестве графика надо использовать самое простое решение, например Polyline. Я использовал просто Line, поэтому у меня и возник вопрос.
//model
public class Segment
{
public Queue<Point> Dots { get; set; }
}
//viewModel
public class ViewModel:INotifyPropertyChanged
{
private Queue<Segment> _segments;
public Queue<Segment> Segments
{
get { return _segments; }
set
{
_segments = value;
OnPropertyChanged("Segments");
}
}
public ViewModel(Queue<Point> segments)
{
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
//MainWindow mainView = new MainWindow();
Queue<Point> q = Class1.GenerateData(); //Class1.GenerateData() returns Queue<Point>
mainView.DataContext = new ViewModel(q);
xaml
<Border Height="100" Width="100" BorderBrush="Black" BorderThickness="1">
<Canvas Background="Pink">
<Canvas.LayoutTransform>
<ScaleTransform ScaleY="-1"/>
</Canvas.LayoutTransform>
<ItemsControl ItemsSource="{Binding Segments}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Line X1="{Binding ??}" Y1="{Binding ??}" X2="{Binding ??}" Y2="{Binding ??}" Stroke="Red"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Canvas>
</Border>
Если бы точки было 2, то с биндингом проблем бы не было. Но точек сейчас много, хотя явно их количество не задано. Обновлять их нужно каждую секунду с помощью Class1.GenerateData(), и об этом будет автоматически узнавать View (верно?)
Но вот как теперь построить график с помощью биндинга, использую данные из ViewModel?
20.02.11 15:47: Перенесено из '.NET'