Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Windows Phone
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Tanya12216
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 55
1

Windows Phone

11.11.2015, 09:28. Просмотров 714. Ответов 17
Метки нет (Все метки)

Подскажите пожалуйста, у меня есть json файл по расписанию, где есть такие поля как наименование группы и номер группы. На странице PageRas.xaml находится элемент AutoSuggestBox, который должен выводить все номера групп,которые находятся в json файле. Как осуществить привязку?

В данном коде, в AutoSuggestBox только те группы, которые я прописала вручную, то есть { "341-ПИ", "351-ПРИ", "341-ИСТ" };. Это не правильно( нужно с json файла).

C#
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
 
// Документацию по шаблону элемента "Пустая страница" см. по адресу [url]http://go.microsoft.com/fwlink/?LinkId=391641[/url]
 
namespace App2
{
    public sealed partial class MainPage : Page
 
    {
       
        public MainPage()
        {
            this.InitializeComponent();
           
            //this.NavigationCacheMode = NavigationCacheMode.Required;
        }
     
            /// <summary>
            /// Вызывается перед отображением этой страницы во фрейме.
            /// </summary>
            /// <param name="e">Данные события, описывающие, каким образом была достигнута эта страница.
            /// Этот параметр обычно используется для настройки страницы.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
            {
                // TODO: Подготовьте здесь страницу для отображения.
 
                // TODO: Если приложение содержит несколько страниц, обеспечьте
                // обработку нажатия аппаратной кнопки "Назад", выполнив регистрацию на
                // событие Windows.Phone.UI.Input.HardwareButtons.BackPressed.
                // Если вы используете NavigationHelper, предоставляемый некоторыми шаблонами,
                // данное событие обрабатывается для вас.
            }
 
        private void AUB_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
        {
            if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
            {
                //if (sender.Text.Length>1)
                //{
                    sender.ItemsSource = this.GetSuggestions(sender.Text);
 
 
                //}
                //else
                //{
                //    sender.ItemsSource = new string[] { "no suggestions..." };
 
                }
            }
        
        private string[] suggestions = new string[] { "341-ПИ", "351-ПРИ", "341-ИСТ" };
        private string[] GetSuggestions(string text)
        {
            string[] result = null;
            result = suggestions.Where(x => x.StartsWith(text)).ToArray();
 
            return result;
        }
    }
    }
Так же код ScheduleDataSource.cs
C#
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.Data.Json;
using Windows.Storage;
 
namespace AppRsue003.DataModel
{
    /// <summary>
    /// Модель данных - учебное занятие
    /// </summary>
    public class Lesson
    {
        public Lesson(int lessonID, int numberLesson, string typeLesson, string discipline, string roleTeacher, string teacher, string room)
        {
            this.LessonID = lessonID;
            this.NumberLesson = numberLesson;
            this.TypeLesson = typeLesson;
            this.Discipline = discipline;
            this.RoleTeacher = roleTeacher;
            this.Teacher = teacher;
            this.Room = room;
        }
 
        /// <summary>
        /// Код занияти
        /// </summary>
        public int LessonID { get; private set; }
 
        /// <summary>
        /// Номер занятия (1-я - 8-я пара)
        /// </summary>
        public int NumberLesson { get; private set; }
        /// <summary>
        /// Тип занятия: лекция, лабораторное занятие, практика  
        /// </summary>
        public string TypeLesson { get; private set; }
        /// <summary>
        /// Наименование дисциплины
        /// </summary>
        public string Discipline { get; private set; } // 
        /// <summary>
        /// Должность преподавателя
        /// </summary>
        public string RoleTeacher { get; private set; }
        /// <summary>
        /// ФИО преподавателя
        /// </summary>
        public string Teacher { get; private set; }
        /// <summary>
        /// Аудитория проведения занятия
        /// </summary>
        public string Room { get; private set; }
 
        public override string ToString()
        {
            return this.TypeLesson + " " + this.Discipline + " " + this.Teacher;
        }
    }
 
    /// <summary>
    /// Модель данных - расписание на неделю 
    /// </summary>
    public class Schedule
    {
        public Schedule(int scheduleId, int number, string dayOfWeek)
        {
            this.ScheduleId = scheduleId;
            this.Number = number;
            this.DayOfWeek = dayOfWeek;
            this.Lessons = new List<Lesson>();
        }
 
        /// <summary>
        /// Код расписания
        /// </summary>
        public int ScheduleId { get; private set; }
 
        /// <summary>
        /// Номер недели: четная/нечетная
        /// </summary>
        public int Number { get; private set; }
        /// <summary>
        /// День недели
        /// </summary>
        public string DayOfWeek { get; private set; }
        /// <summary>
        /// Коллекция учебныых занятий
        /// </summary>
        public List<Lesson> Lessons { get; private set; }
 
        public override string ToString()
        {
            return this.DayOfWeek;
        }
    }
 
    /// <summary>
    /// Модель данных - расписание группы
    /// </summary>
    public class GroupSchedule
    {
        public GroupSchedule(string nameGroup)
        {
            this.NameGroup = nameGroup;
            this.Schedules = new List<Schedule>();
        }
 
        /// <summary>
        /// Номер учебной группы
        /// </summary>
        public string NameGroup { get; private set; }
        /// <summary>
        /// Коллекция расписания на дни недели
        /// </summary>
        public List<Schedule> Schedules { get; private set; }
 
        public override string ToString()
        {
            return this.NameGroup;
        }
 
    }
 
    /// <summary>
    /// Источник данных по расписанию
    /// </summary>
    public sealed class ScheduleDadaSource
    {
        private static ScheduleDadaSource scheduleDataSource = new ScheduleDadaSource();
 
        private ObservableCollection<GroupSchedule> groups = new ObservableCollection<GroupSchedule>();
 
        public ObservableCollection<GroupSchedule> Groups
        {
            get
            {
                return groups;
            }
        }
 
        private ObservableCollection<Schedule> schedules = new ObservableCollection<Schedule>();
 
        public ObservableCollection<Schedule> Schedules
        {
            get
            {
                return schedules;
            }
        }
 
        private ObservableCollection<Lesson> lessonss = new ObservableCollection<Lesson>();
 
        public ObservableCollection<Lesson> Lessons
        {
            get
            {
                return lessonss;
            }
        }
 
 
        public static async Task<IEnumerable<GroupSchedule>> GetGroupsAsync()
        {
            await scheduleDataSource.GetScheduleDataAsync();
 
            return scheduleDataSource.Groups;
        }
 
 
 
        public static async Task<GroupSchedule> GetGroupsAsync(string nameGroup)
        {
            await scheduleDataSource.GetScheduleDataAsync();
            // Для небольших наборов данных можно использовать простой линейный поиск
            var matches = scheduleDataSource.Groups.Where((group) => group.NameGroup.Equals(nameGroup));
            if (matches.Count() == 1) return matches.First();
            return null;
        }
 
        public static async Task<Schedule> GetScheduleAsync(int scheduleId)
        {
            await scheduleDataSource.GetScheduleDataAsync();
            // Для небольших наборов данных можно использовать простой линейный поиск
            var matches = scheduleDataSource.Groups.SelectMany(group => group.Schedules).Where((schedule) =>
                                  (schedule.ScheduleId.Equals(scheduleId)));
            if (matches.Count() == 1) return matches.First();
            return null;
        }
 
        public static async Task<Lesson> GetLessonASync(int scheduleId, int lessonId)
        {
            await GetScheduleAsync(scheduleId);
 
            var matches = scheduleDataSource.Schedules.SelectMany(les => les.Lessons).Where((lesson) =>
                                  (lesson.LessonID.Equals(lessonId)));
            if (matches.Count() == 1) return matches.First();
            return null;
        }
 
 
        /// <summary>
        /// Парсинг расписания из Json файла
        /// </summary>
        /// <returns></returns>
        private async Task GetScheduleDataAsync()
        {
            if (this.groups.Count != 0)
                return;
 
            Uri dataUri = new Uri("ms-appx:///DataModel/Schedule.json");
 
            StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
            string jsonText = await FileIO.ReadTextAsync(file);
 
            JsonObject jsonObject = JsonObject.Parse(jsonText);
            JsonArray jsonArrayGroup = jsonObject["Groups"].GetArray();
 
            foreach (JsonValue groupValue in jsonArrayGroup)
            {
                JsonObject groupObject = groupValue.GetObject();
                GroupSchedule group = new GroupSchedule(groupObject["NameGroup"].GetString());
 
                foreach (JsonValue scheduleValue in groupObject["Schedules"].GetArray())
                {
                    JsonObject scheduleObject = scheduleValue.GetObject();
                    Schedule schedule = new Schedule((int)scheduleObject["ScheduleId"].GetNumber(),
                                                     (int)scheduleObject["Number"].GetNumber(),
                                                     scheduleObject["DayOfWeek"].GetString());
                    group.Schedules.Add(schedule);
 
                    foreach (JsonValue lessonValue in scheduleObject["Lessons"].GetArray())
                    {
                        JsonObject lessonObject = lessonValue.GetObject();
                        schedule.Lessons.Add(new Lesson((int)lessonObject["LessonId"].GetNumber(),
                                                        (int)lessonObject["NumberLesson"].GetNumber(),
                                                        scheduleObject["TypeLesson"].GetString(),
                                                        scheduleObject["Discipline"].GetString(),
                                                        scheduleObject["RoleTeacher"].GetString(),
                                                        scheduleObject["Teacher"].GetString(),
                                                        scheduleObject["Room"].GetString()));
                    }
                }
                this.Groups.Add(group);
            }
        }
 
 
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2015, 09:28
Ответы с готовыми решениями:

На Windows Phone 8 можно будет запускать приложения для Windows Phone 7
Либерман сообщил, что операционная система будет обладать обратной...

Совместим ли код Windows Phone 7 с Windows Phone 8?
Совместим ли код Windows Phone 7 с Windows Phone 8?

Разница в Windows Phone Silverlight App и Windows Phone App
Доброго вам времени суток, товарищи! Возможно вопрос дурацкий, но я не смог...

Правда ли что на windows ниже 8 нет никакой возможности разрабатывать под windows phone
Правда ли что на windows ниже 8 нет никакой возможности разрабатывать под...

Можно ли создавать приложение для windows phone 7 на пк с windows 8
Хотел начать разрабатывать под windows phone 7 но столкнулся с проблемой что...

17
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
12.11.2015, 12:14 2
Во первых на этом форуме код помечается соответствующими тегами, после чего синтаксис подсвечивается для наглядности. Если код длинный то он еще помещается в спойлер.
По теме у Вас AUB_TextChanged() напоминает велосипед. Компонент берет на себя функцию поиска и подстановки по мере ввода. Нужно лишь привязать коллекцию айтемов, строк в вашем случае. Если я правильно понял источник ObservableCollection<GroupSchedule> groups код то для вас будет такой:
C#
1
AUB.ItemsSource = groups.NameGroup
0
Tanya12216
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 55
12.11.2015, 12:37  [ТС] 3
Задала источник AutuSuggestBox в xaml:
<AutoSuggestBox x:Name="AUB" ItemsSource="{Binding Groups}" TextChanged="AUB_TextChanged" Text="{Binding NameGroup}" HorizontalAlignment="Left" Margin="0,9.833,0,0" Grid.Row="1" VerticalAlignment="Top" Width="400" SuggestionChosen="AutoSuggestBox_SuggestionChosen_1"/>
Но он выводит весь список групп, не осуществляя подстановку по мере ввода.
События AUB_TextChanged и AutoSuggestBox_SuggestionChosen_1 у меня пустые
Миниатюры
0
Миниатюры
Windows Phone  
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
12.11.2015, 20:47 4
Tanya12216, блин моя косяк( На самом деле я не правильно вам сказал, изначально вы двигались в верном направлении TextChanged нужно вручную следить за вводом и обновлять колелкцию(
попробуй так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private void AUB_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
 {
 
            List<string> groupsTmp = new List<string>();
 
            foreach (string group in groups.NameGroup)
            {
                if (group.Contains(AUB.Text))
                    groupsTmp.Add(group);
            }
            AUB.ItemsSource = groupsTmp;
 
 }
0
Tanya12216
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 55
12.11.2015, 21:16  [ТС] 5
Возникла ошибка
Windows Phone
0
Tanya12216
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 55
12.11.2015, 21:18  [ТС] 6
groups - это же коллекция, к ней через индексы нужно обращаться. Как это реализовать?
0
Tanya12216
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 55
12.11.2015, 21:22  [ТС] 7
ошибка
Windows Phone
0
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
12.11.2015, 22:48 8
хз, значит я не правильно понял в какой коллекции лежит у тебя список групп. зазберись где у тебя группы и замени в моем коде groups.NameGroup на переменную которая содержит список названий этих самых групп
0
Tanya12216
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 55
12.11.2015, 23:21  [ТС] 9
Заменила на foreach (string group in groups.groupSchedule()) , так как NameGroup находится в коллекции groupSchedule. Выдает ту же самую ошибку(
0
Миниатюры
Windows Phone  
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
13.11.2015, 09:30 10
может у тебя просто все в groups или в ней по другому называется коллекция... ставь точки остановка и во время отладки смотри что у тебя в groups и других переменных...
0
Tanya12216
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 55
15.11.2015, 21:23  [ТС] 11
Добавила элемент DataPicker на страницу с расписанием. Нужно привязать этот элемент к файлу json, так чтобы расписание выводилось в соответствии с определенным днем по каждой группе. Подскажите пожалуйста как это вообще сделать?? Например: выбираем группу 341-ПИ, выбираем день(DataPicker) и в ListView выводим расписание этой группы на этот день из json файла. Какое событие будет реализовано при выборе даты в DataPicker?
0
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
16.11.2015, 09:52 12
Цитата Сообщение от Tanya12216 Посмотреть сообщение
Нужно привязать этот элемент к файлу json
Прежде всего я бы рекомендовал разобраться в понятиях и принципах. json файл хранит локально расписание и используется только лишь для чтения/записи. При первой работе с приложением из файла должно происходить чтение нужных данных в соответствующие коллекции хранимые в оперативной памяти. Потом вы обращаетесь к переменной коллекции и выводите/выбираете данные оттуда по дням и т.д.
т.е. нужно делать запрос к коллекции со значением группы и даты (а если точнее то по дате нужно определять день недели и четность и делать запрос)...
Научитесь самостоятельно догадываться о событиях, я сделал скриншот и ты можешь у любого контрола посмотреть доступные события и догадаться о их предназначении. Очевидно у даты нужное тебе datechanged, тут можешь посмотреть уроки или тут. на будущее там их много по разным контролам и аспектам...
0
Миниатюры
Windows Phone  
Tanya12216
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 55
16.11.2015, 15:36  [ТС] 13
меня интересует как будет проверяться условие четности/нечетности недели? Часть кода в ScheduleDataSourse.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  public class GroupSchedule
    {
        public GroupSchedule(string nameGroup)
        {
            this.NameGroup = nameGroup;
            this.Schedules = new List<Schedule>();
        }
 
        /// <summary>
        /// Номер учебной группы
        /// </summary>
        public string NameGroup { get; private set; }
        /// <summary>
        /// Коллекция расписания на дни недели
        /// </summary>
        public List<Schedule> Schedules { get; private set; }
 
        public override string ToString()
        {
            return this.NameGroup;
        }
Что будет в событии DateChanged?

private void datepicker_DateChanged(object sender, DatePickerValueChangedEventArgs e)
{

}

Добавлено через 1 минуту
C#
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
 public class Schedule
    {
        public Schedule(int scheduleId, int number, string dayOfWeek)
        {
            this.ScheduleId = scheduleId;
            this.Number = number;
            this.DayOfWeek = dayOfWeek;
            this.Lessons = new List<Lesson>();
        }
 
        /// <summary>
        /// Код расписания
        /// </summary>
        public int ScheduleId { get; private set; }
 
        /// <summary>
        /// Номер недели: четная/нечетная
        /// </summary>
        public int Number { get; private set; }
        /// <summary>
        /// День недели
        /// </summary>
        public string DayOfWeek { get; private set; }
        /// <summary>
        /// Коллекция учебныых занятий
        /// </summary>
        public List<Lesson> Lessons { get; private set; }
 
        public override string ToString()
        {
            return this.DayOfWeek;
        }
    }
0
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
16.11.2015, 20:39 14
На этом форум могут подсказать по апи/технологиям и техническим аспектам, но не по алгоритмам)
Подумайте сами как это реализовать)
Кликните здесь для просмотра всего текста
подсказка: у тебя на входе есть дата и можно посчитать номер недели от начала года, на основе это проверить четность
код как то так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
int weekNum = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
int dayNum = (int)date.DayOfWeek;
 
//...
 
int chetnostNow = 2; // или 1 взависимост от системы в универе
               
                if (less.chetnost == chetnostNow && less.weekday == dayNum)
                {
                
                 //less подходит к этой дате)
                }
0
Tanya12216
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 55
17.11.2015, 20:10  [ТС] 15
На первом шаге выбирается номер группы, на втором шаге выбирается день недели, на который нужно сформировать расписание для данной группы. Подскажите,как определить параметры number и dayOfWeek.number-определяет четная неделя или нечетная, dayOfWeek-день недели. При выборе номера группы формируется коллекция занятий
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
  private async void asbGroup_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
        {
            searchGroup = args.SelectedItem.ToString();
 
            //number = args.ToInt32();
 
          //  dayOfWeek = args.ToString();
 
            List<Lesson> listLesson = await GetLessonsAsync(searchGroup, number, dayOfWeek);
            itemsListView.ItemsSource = listLesson;
 
            // Сделать дальнейшие действия по формированию расписания
        }
0
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
17.11.2015, 20:35 16
number не надо выбирать. расписание вернутся по группе и дню как список пар в этот день у группы, а номера этих пар будут в ответе
0
Tanya12216
0 / 0 / 0
Регистрация: 02.11.2015
Сообщений: 55
17.11.2015, 20:40  [ТС] 17
number-это определение недели, т.е. четная или нечетная. Этот параметр обязательно нужно задать, проблема, в том, как это сделать(
0
beats
100 / 38 / 9
Регистрация: 09.12.2012
Сообщений: 567
18.11.2015, 09:43 18
а... выше под спойлером я частично давал ответ на этот вопрос
C#
1
2
int weekNum = CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
if (weekNum % 2 == 0) то четная или наоборот
0
18.11.2015, 09:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2015, 09:43

Обмен данными между Windows Phone и Windows по wi-fi
Как сделать обмен данными между Windows Phone и Windows по wi-fi?

Эмулятор Windows Phone 8/8.1
Доброго времени суток, уважаемые форумчане! Установил Windows 10 (пока только...

Потоки в windows phone 8.1
на msdn есть такой пример xml-сериализации с помощью TextWriter. и вроде как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru