Реализация MVVM паттерна в WPF
От: Аноним  
Дата: 20.02.11 06:56
Оценка:
Нужно построить график, который похож на тот, что показывает загрузку процессора в 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'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.