diff --git a/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj b/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj
index bad54601..2748d227 100644
--- a/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj
+++ b/CampusAppWP8/CampusAppWP8/CampusAppWP8.csproj
@@ -151,6 +151,7 @@
TimeTableWeek.xaml
+
@@ -247,6 +248,9 @@
WeekViewPivotHeader.xaml
+
+ AppointmentCanvas.xaml
+
WeekView.xaml
@@ -531,6 +535,10 @@
Designer
MSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+
Designer
MSBuild:Compile
diff --git a/CampusAppWP8/CampusAppWP8/Model/TimeTable/AppointmentModel.cs b/CampusAppWP8/CampusAppWP8/Model/TimeTable/AppointmentModel.cs
index b4aaaca5..918e2ebc 100644
--- a/CampusAppWP8/CampusAppWP8/Model/TimeTable/AppointmentModel.cs
+++ b/CampusAppWP8/CampusAppWP8/Model/TimeTable/AppointmentModel.cs
@@ -25,16 +25,8 @@ namespace CampusAppWP8.Model.TimeTable
[XmlRoot("root")]
public class AppointmentModel
{
- /// The Visual object.
- //private Rectangle rect = null;
- //private Canvas canvas = null;
- //private double offsetY = 0;
- //private double height = 0;
- //private double width = 100;
-
private ICalObject icalObj = null;
- //private ICalObject eventICalObj = null;
-
+
public delegate void OnAppointmentClick(AppointmentModel sender);
public event OnAppointmentClick OnClick = null;
@@ -53,11 +45,6 @@ namespace CampusAppWP8.Model.TimeTable
this.icalObj.Header = newBegin;
this.icalObj.AddProperty(newVersion);
this.icalObj.AddProperty(newProdID);
-
- //this.rect = new Rectangle();
- //this.canvas = new Canvas();
- //this.canvas.DoubleTap += new EventHandler(this.OnCanvasClick);
- //this.canvas.SizeChanged += new SizeChangedEventHandler(this.OnCanvasSizeChanged);
}
public AppointmentModel(string icsData) : this()
@@ -150,93 +137,50 @@ namespace CampusAppWP8.Model.TimeTable
vevent.AddProperty(value);
}
- public Canvas GetCanvas(double width, double hourSpacing, DateTime date)
+ public object GetValue(string propertyName)
{
- Canvas retValue = new Canvas();
- //retValue.DoubleTap += new EventHandler()
- retValue.Tag = this;
-
- if (this.End.Date.Equals(this.Start.Date) == false)
- {
- DateTime realDate = date.Date;
-
- if (realDate.Equals(this.Start.Date))
- {
- TimeSpan span = this.Start.Date.AddDays(1).Subtract(this.Start);
- retValue.Height = span.TotalHours * hourSpacing;
- retValue.Margin = new Thickness(0, (hourSpacing * this.Start.TimeOfDay.TotalHours), 0, 0);
- }
- else if (realDate.Equals(this.End.Date))
- {
- retValue.Height = this.End.TimeOfDay.TotalHours * hourSpacing;
- }
- else
- {
- retValue.Height = hourSpacing * 24;
- }
- }
- else
- {
- TimeSpan span = this.End.Subtract(this.Start);
- retValue.Height = span.TotalHours * hourSpacing;
- retValue.Margin = new Thickness(0, (hourSpacing * this.Start.TimeOfDay.TotalHours), 0, 0);
- }
-
- retValue.Width = width;
-
- this.CreateRect(retValue);
- this.CreateContent(retValue, hourSpacing);
+ object retValue = this.GetVEventObj().GetProperty(propertyName);
return retValue;
}
- private void CreateRect(Canvas can)
+ public double GetTotalHours()
{
-// can.Children.Clear();
-
- Rectangle rect = new Rectangle();
- rect.Width = can.Width;
- rect.Height = can.Height;
-
- rect.StrokeThickness = 1;
- rect.Stroke = new SolidColorBrush(Colors.DarkGray);
- rect.Fill = new SolidColorBrush(Colors.Green);
- rect.RadiusX = 5;
- rect.RadiusY = 5;
-
- can.Children.Add(rect);
+ return this.End.Subtract(this.Start).TotalHours;
}
- private void CreateContent(Canvas can, double hourSpacing)
+ public double GetTotalHours(DateTime date)
{
- if (this.icalObj != null)
+ double retValue = 0;
+
+ if (date.Date.Equals(this.Start.Date))
{
- ICalObject eventObj = this.GetVEventObj();
- Summary title = eventObj.GetProperty(ICSTag.SUMMARY) as Summary;
-
- TextBlock txtTitle = new TextBlock();
- txtTitle.FontSize = hourSpacing / 3;
- txtTitle.FontWeight = FontWeights.Bold;
- txtTitle.TextWrapping = TextWrapping.Wrap;
- txtTitle.Width = can.Width - 4.0;
- txtTitle.SetValue(Canvas.LeftProperty, 3.0);
- txtTitle.SetValue(Canvas.TopProperty, 3.0);
-
- if (can.Height >= ((hourSpacing / 2)))
+ if (this.End.Date.Equals(this.Start.Date))
{
- txtTitle.Margin = new Thickness(0, -2, 0, 0);
- txtTitle.Text = title.Value;
+ retValue = this.GetTotalHours();
}
else
{
- txtTitle.Height = can.Height;
- txtTitle.VerticalAlignment = VerticalAlignment.Center;
- txtTitle.Margin = new Thickness(0, -10, 0, 0);
- txtTitle.Text = "...";
+ retValue = date.Date.AddDays(1).Subtract(this.Start).TotalHours;
}
-
- can.Children.Add(txtTitle);
}
+ else if (date.Date.Equals(this.End.Date))
+ {
+ retValue = this.End.Subtract(date.Date).TotalHours;
+ }
+ else
+ {
+ if (this.Start.Date <= date && date <= this.End.Date)
+ {
+ retValue = 24;
+ }
+ else
+ {
+ retValue = 0;
+ }
+ }
+
+ return retValue;
}
private ICalObject GetVEventObj(bool create = false)
diff --git a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTable.cs b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTable.cs
index 65f5dded..fffa353a 100644
--- a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTable.cs
+++ b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTable.cs
@@ -24,9 +24,9 @@ namespace CampusAppWP8.Pages.TimeTable
{
private static AppointmentListModel appList //= null;
= new AppointmentListModel(new AppointmentModel[] {
- new AppointmentModel("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:ownCloud Calendar 0.6.3\r\nX-WR-CALNAME:Das is der Titel\r\nBEGIN:VEVENT\r\nCREATED;VALUE=DATE-TIME:20130827T113216Z\r\nUID:c9904ea73c\r\nLAST-MODIFIED;VALUE=DATE-TIME:20130827T113216Z\r\nDTSTAMP;VALUE=DATE-TIME:20130827T113216Z\r\nSUMMARY:Das is der Titel\r\nDTSTART;VALUE=DATE-TIME:20131002T113500Z\r\nDTEND;VALUE=DATE-TIME:20131002T212000Z\r\nCLASS:PUBLIC\r\nLOCATION:BTU Campus\r\nDESCRIPTION:For Outlook 2003, the behavior is peculiar. It can save the sa\r\n me calendar entry in both .ics and .vcs format, but it only read & displa\r\n y .vcs file correctly. It can read .ics file but it omits some fields and \r\n does not display it in calendar mode. My guess is that back then Microsoft\r\n wanted to provide .ics to be compatible with Mac's iCal but not quite com\r\n mitted to v2.0 yet.\r\nCATEGORIES:Projekte\r\nEND:VEVENT\r\nEND:VCALENDAR"),
- new AppointmentModel("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:http://www.example.com/calendarapplication/\r\nMETHOD:PUBLISH\r\nBEGIN:VEVENT\r\nUID:461092315540@example.com\r\nORGANIZER:MAILTO:alice@example.com\r\nLOCATION:Somewhere\r\nSUMMARY:Eine Kurzinfo\r\nDESCRIPTION:Beschreibung des Termines\r\nCLASS:PUBLIC\r\nDTSTART:20131002T110000Z\r\nDTEND:20131004T113000Z\r\nDTSTAMP:20131003T125900Z\r\nEND:VEVENT\r\nEND:VCALENDAR"),
- new AppointmentModel("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//hacksw/handcal//NONSGML v1.0//EN\r\nBEGIN:VEVENT\r\nUID:uid1@example.com\r\nDTSTAMP:19970714T170000Z\r\nORGANIZER;CN=John Doe:MAILTO:john.doe@example.com\r\nDTSTART:20131003T150000Z\r\nDTEND:20131003T170000Z\r\nSUMMARY:Bastille Day Party\r\nEND:VEVENT\r\nEND:VCALENDAR"),
+ new AppointmentModel("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:ownCloud Calendar 0.6.3\r\nX-WR-CALNAME:Das is der Titel\r\nBEGIN:VEVENT\r\nCREATED;VALUE=DATE-TIME:20130827T113216Z\r\nUID:c9904ea73c\r\nLAST-MODIFIED;VALUE=DATE-TIME:20130827T113216Z\r\nDTSTAMP;VALUE=DATE-TIME:20130827T113216Z\r\nSUMMARY:Das is der Titel\r\nDTSTART;VALUE=DATE-TIME:20131022T113500Z\r\nDTEND;VALUE=DATE-TIME:20131022T212000Z\r\nCLASS:PUBLIC\r\nLOCATION:BTU Campus\r\nDESCRIPTION:For Outlook 2003, the behavior is peculiar. It can save the sa\r\n me calendar entry in both .ics and .vcs format, but it only read & displa\r\n y .vcs file correctly. It can read .ics file but it omits some fields and \r\n does not display it in calendar mode. My guess is that back then Microsoft\r\n wanted to provide .ics to be compatible with Mac's iCal but not quite com\r\n mitted to v2.0 yet.\r\nCATEGORIES:Projekte\r\nEND:VEVENT\r\nEND:VCALENDAR"),
+ new AppointmentModel("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:http://www.example.com/calendarapplication/\r\nMETHOD:PUBLISH\r\nBEGIN:VEVENT\r\nUID:461092315540@example.com\r\nORGANIZER:MAILTO:alice@example.com\r\nLOCATION:Somewhere\r\nSUMMARY:Eine Kurzinfo welche einen etwas längeren titel enthält\r\nDESCRIPTION:Beschreibung des Termines\r\nCLASS:PUBLIC\r\nDTSTART:20131023T110000Z\r\nDTEND:20131024T113000Z\r\nDTSTAMP:20131003T125900Z\r\nPRIORITY:3\r\nEND:VEVENT\r\nEND:VCALENDAR"),
+ new AppointmentModel("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//hacksw/handcal//NONSGML v1.0//EN\r\nBEGIN:VEVENT\r\nUID:uid1@example.com\r\nDTSTAMP:19970714T170000Z\r\nORGANIZER;CN=John Doe:MAILTO:john.doe@example.com\r\nDTSTART:20131025T150000Z\r\nDTEND:20131025T170000Z\r\nSUMMARY:Bastille Day Party\r\nEND:VEVENT\r\nEND:VCALENDAR"),
new AppointmentModel("BEGIN:VCALENDAR\r\nVERSION:1.0\r\nBEGIN:VEVENT\r\nCATEGORIES:MEETING\r\nSTATUS:TENTATIVE\r\nDTSTART:20130917T033000Z\r\nDTEND:20130917T043000Z\r\nSUMMARY:Your Proposal Review\r\nDESCRIPTION:Steve and John to review newest proposal material bla fsdfasfsdfsdfgsdafg sfdgfdsgf dsfg dsfgds fgds\r\nCLASS:PRIVATE\r\nEND:VEVENT\r\nEND:VCALENDAR"),
new AppointmentModel("BEGIN:VCALENDAR\r\nPRODID:-//bobbin v0.1//NONSGML iCal Writer//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nMETHOD:PUBLISH\r\nBEGIN:VEVENT\r\nDTSTART:20130918T080000Z\r\nDTEND:20130918T110000Z\r\nDTSTAMP:20091130T213238Z\r\nUID:1285935469767a7c7c1a9b3f0df8003a@yoursever.com\r\nCREATED:20091130T213238Z\r\nDESCRIPTION:Example event 1\r\nLAST-MODIFIED:20091130T213238Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Example event 1\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR"),
new AppointmentModel("BEGIN:VCALENDAR\r\nPRODID:-//bobbin v0.1//NONSGML iCal Writer//EN\r\nVERSION:2.0\r\nCALSCALE:GREGORIAN\r\nMETHOD:PUBLISH\r\nBEGIN:VEVENT\r\nDTSTART:20130914T120000Z\r\nDTEND:20130914T140000Z\r\nDTSTAMP:20091130T213238Z\r\nUID:1285935469767a7c7c1a9b3f0df8003a@yoursever.com\r\nCREATED:20091130T213238Z\r\nDESCRIPTION:Example event 1\r\nLAST-MODIFIED:20091130T213238Z\r\nSEQUENCE:0\r\nSTATUS:CONFIRMED\r\nSUMMARY:Example event 1\r\nTRANSP:OPAQUE\r\nEND:VEVENT\r\nEND:VCALENDAR")
diff --git a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml.cs
index f4f6c819..43226ae6 100644
--- a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml.cs
+++ b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableDay.xaml.cs
@@ -471,6 +471,7 @@ namespace CampusAppWP8.Pages.TimeTable
private void DrawAppointmentModel(AppointmentModel model, int index, double opacity = 1.0, int zIndex = 0, int modelCount = 0)
{
+/* TODO
Canvas modelCan = model.GetCanvas(
((this.itemPages[index].Content.Width - DAY_TABLE_HEAD_WIDTH) - 2 - 2 - (modelCount * DAY_TABLE_ZINDEX_SHIFT)),
DAY_TABLE_CELL_HEIGHT,
@@ -479,6 +480,7 @@ namespace CampusAppWP8.Pages.TimeTable
modelCan.DoubleTap += new EventHandler(this.OnAppointmentClick);
this.DrawAppointmentCanvas(modelCan, index, opacity, zIndex, modelCount);
+*/
}
private void DrawMultiBubble(int stackIndex, int listIndex, int number, double xOffset, double yOffset)
diff --git a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml
index e579f271..c1e89fdd 100644
--- a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml
+++ b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml
@@ -13,7 +13,8 @@
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Landscape" Orientation="Landscape"
mc:Ignorable="d"
- shell:SystemTray.IsVisible="True">
+ shell:SystemTray.IsVisible="True"
+ >
@@ -27,11 +28,11 @@
+ Margin="0,-36,0,0"
+ DateFrom="{Binding Path=FromDT, Mode=OneWay}"
+ WeekName="{Binding Path=WeekStr, Mode=OneWay}"
+ Appointments="{Binding Path=AppointmentList, Mode=OneWay}"
+ WeekNumber="{Binding Path=WeekNr, Mode=OneWay}"/>
diff --git a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml.cs b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml.cs
index 5c399192..75e324ba 100644
--- a/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml.cs
+++ b/CampusAppWP8/CampusAppWP8/Pages/TimeTable/TimeTableWeek.xaml.cs
@@ -10,6 +10,7 @@ namespace CampusAppWP8.Pages.TimeTable
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
+ using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
@@ -33,25 +34,14 @@ namespace CampusAppWP8.Pages.TimeTable
private static readonly double WEEK_TABLE_INNER_THICKNESS = 1;
private static readonly int WEEK_TABLE_ZINDEX_MAX = 10;
-
- private struct PageItem
- {
- public DateTime DateFrom { get; set; }
- public DateTime DateTo { get; set; }
- public char WeekChar { get; set; }
- public int WeekNumber { get; set; }
- public WeekView weekView { get; set; }
- //???
- public List AppointmentList { get; set; }
- }
-
private static readonly int PIVOT_PAGES = 3;
private static readonly int PIVOT_PAGES_HALF_DOWN = 1;
private static readonly int PIVOT_PAGES_COLUMNS = 5; // days in week
- private PageItem[] itemPages = new PageItem[PIVOT_PAGES];
private int lastSelectedIndex = 0;
-
+
+ private ObservableCollection itemList = new ObservableCollection();
+
public TimeTableWeek()
{
this.InitializeComponent();
@@ -60,10 +50,13 @@ namespace CampusAppWP8.Pages.TimeTable
for (int i = 0; i < PIVOT_PAGES; i++)
{
- this.itemPages[i].DateFrom = firstDay;
- this.itemPages[i].DateTo = firstDay.AddDays(6);
- this.itemPages[i].WeekNumber = this.GetWeekNumber(this.itemPages[i].DateFrom);
- this.itemPages[i].WeekChar = ((this.itemPages[i].WeekNumber % 2) != 0) ? 'A' : 'B';
+ int weekNr = this.GetWeekNumber(firstDay);
+ string weekStr = ((weekNr % 2) != 0) ? "A" : "B";
+
+ WeekViewPageItem newItem = new WeekViewPageItem(firstDay, weekStr, weekNr, 6);
+
+ this.itemList.Add(newItem);
+
firstDay = firstDay.AddDays(7);
}
@@ -102,9 +95,11 @@ namespace CampusAppWP8.Pages.TimeTable
}
else
{
- this.ThePivot.ItemsSource = this.itemPages;
+ this.ThePivot.ItemsSource = this.itemList;
this.lastSelectedIndex = PIVOT_PAGES_HALF_DOWN;
this.ThePivot.SelectedIndex = PIVOT_PAGES_HALF_DOWN;
+
+ this.CheckAppointments();
}
}
@@ -156,6 +151,7 @@ namespace CampusAppWP8.Pages.TimeTable
page.NavigationService.Navigate(url);
*/
// this.itemPages[this.ThePivot.SelectedIndex].weekView.SetColumnBackground(0, new SolidColorBrush(Colors.Red));
+ (this.ThePivot.SelectedItem as WeekViewPageItem).AppointmentList.Add(TimeTable.AppointmentsModel.Appointments[1]);
}
private void OnClickToday(object sender, EventArgs e)
@@ -198,7 +194,7 @@ namespace CampusAppWP8.Pages.TimeTable
private void OnPivotSelectionChanged(object sender, SelectionChangedEventArgs e)
{
int delta = this.ThePivot.SelectedIndex - this.lastSelectedIndex;
-
+ /*
if (delta < -1) delta = 1;
else if (delta > 1) delta = -1;
@@ -210,10 +206,10 @@ namespace CampusAppWP8.Pages.TimeTable
}
else
{
- this.itemPages[index].DateFrom = this.itemPages[this.ThePivot.SelectedIndex].DateFrom.AddDays((7 * delta));
- this.itemPages[index].DateTo = this.itemPages[this.ThePivot.SelectedIndex].DateTo.AddDays((7 * delta));
+ this.itemList[index].FromDT = this.itemList[this.ThePivot.SelectedIndex].FromDT.AddDays((7 * delta));
+ this.itemList[index].ToDT = this.itemList[this.ThePivot.SelectedIndex].ToDT.AddDays((7 * delta));
}
-
+ */
//this.itemPages[index].Content.Children.Clear();
// this.itemPages[index].WeekNumber = System.Globalization.DateTimeFormatInfo.CurrentInfo.Calendar.GetWeekOfYear(
// this.itemPages[index].DateFrom,
@@ -292,7 +288,7 @@ namespace CampusAppWP8.Pages.TimeTable
*/
// this.RemoveContentUIElement(index, sender as Canvas);
- bool bubbleDrawn = false;
+ //bool bubbleDrawn = false;
/*
for (int day = 0; day < 5; day++)
{
@@ -329,7 +325,7 @@ namespace CampusAppWP8.Pages.TimeTable
{
for (int i = 0; i < PIVOT_PAGES; i++)
{
- if (tempModel.IsDate(this.itemPages[i].DateFrom, 4) > -1)
+ if (tempModel.IsDate(this.itemList[i].FromDT, 4) > -1)
{
this.SetupPage(i);
}
@@ -337,30 +333,21 @@ namespace CampusAppWP8.Pages.TimeTable
}
}
- private void OnCanvasSizeChanged(object sender, SizeChangedEventArgs e)
+ private void CheckAppointments()
{
- /*
- if (e.NewSize.Width.Equals(e.PreviousSize.Width) == false)
+ foreach (AppointmentModel m in TimeTable.AppointmentsModel.Appointments)
{
- Canvas tempContainer = (sender as Canvas);
- Canvas tempBG = (tempContainer.Children[0] as Canvas);
- Canvas tempContent = (tempContainer.Children[1] as Canvas);
- tempBG.Width = e.NewSize.Width;
- tempBG.Height = e.NewSize.Height;
- tempContent.Width = e.NewSize.Width;
- tempContent.Height = e.NewSize.Height;
-
- PivotItem pvItem = ((tempContainer.Parent as ScrollViewer).Parent as PivotItem);
- Grid headGrid = pvItem.Header as Grid;
- int index = this.ThePivot.Items.IndexOf(pvItem);
-
- headGrid.Width = e.NewSize.Width;
-
- this.SetupPage(index);
+ for (int i = 0; i < PIVOT_PAGES; i++)
+ {
+ if (m.IsDate(this.itemList[i].FromDT, 4) >= 0)
+ {
+ this.itemList[i].AppointmentList.Add(m);
+ }
+ }
}
- */
}
+
private void SetupPage(int index)
{
// Header
@@ -400,7 +387,7 @@ namespace CampusAppWP8.Pages.TimeTable
}
}
*/
- if (TimeTable.AppointmentsModel.Appointments[i].IsDate(this.itemPages[index].DateFrom.Date, 4) > -1)
+ if (TimeTable.AppointmentsModel.Appointments[i].IsDate(this.itemList[index].FromDT.Date, 4) > -1)
{
tempList.Add(TimeTable.AppointmentsModel.Appointments[i]);
}
@@ -633,46 +620,6 @@ namespace CampusAppWP8.Pages.TimeTable
*/
}
- private void RemoveContentUIElement(int index, UIElement elem)
- {
-// if (this.itemPages[index].Content.Children.Remove(elem) == false)
- {
- throw new ArgumentException();
- }
- }
-
- private void RemoveContentUIElement(int index, AppointmentModel model)
- {
- Canvas[] list = this.GetModelCanvasFromContent(index, model);
-
- if (list.Count() > 0)
- {
- foreach (Canvas can in list)
- {
-// this.itemPages[index].Content.Children.Remove(can);
- }
- }
- }
-
- private Canvas[] GetModelCanvasFromContent(int index, AppointmentModel model)
- {
- List