Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Реализация MVVM паттерна. / 5 сообщений из 5, страница 1 из 1
20.02.2011, 09:30
    #37126576
Darooma
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация MVVM паттерна.
Нужно построить график, который похож на тот, что показывает загрузку процессора в TaskManager (CPU usage history) с помощью паттерна MVVM. В качестве графика надо использовать самое простое решение, например Polyline. Я использовал просто Line, поэтому у меня и возник вопрос.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
//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
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<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().

1. Как связать <Line X1="{Binding ??}" Y1="{Binding ??}" X2="{Binding ??}" Y2="{Binding ??}" Stroke="Red"/> с Queue < Point > ?

2. Как < Line .../> будет самообновляься каждую секунду? Или как ViewModel будет самообновляься каждую секунду и извещать об этом View?
...
Рейтинг: 0 / 0
20.02.2011, 09:36
    #37126578
Darooma
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация MVVM паттерна.
Я обновляю ViewModel каждую секунду и об этом автоматически узнает View. Это понятно.
Но вот как теперь построить график с помощью биндинга, использую данные из ViewModel?
...
Рейтинг: 0 / 0
20.02.2011, 16:19
    #37126842
Darooma
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация MVVM паттерна.
up
...
Рейтинг: 0 / 0
20.02.2011, 17:21
    #37126882
Вестник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация MVVM паттерна.
xaml:
<Path Stroke="Red" Data={Binding PointsData}/>

viewmodel:
public string PointsData { get { return ConvertToGeometry(Points) } }

ключевые слова: geometry mini-language
...
Рейтинг: 0 / 0
21.02.2011, 14:24
    #37128306
Руки-крюки
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация MVVM паттерна.
Самый правильный вариант это ObservableCollection + самописная панелька.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Реализация MVVM паттерна. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]