Click here to Skip to main content
15,897,149 members
Articles / Programming Languages / C# 4.0

Silverlight Super Tabs Interface (using View Model / MVVM)

Rate me:
Please Sign up or sign in to vote.
4.94/5 (17 votes)
14 Nov 2010Ms-PL4 min read 89.7K   2.9K   47  
Dynamically creating tabs of different types in the same Tab Control
  • simpleattendancetabs.zip
    • SilmpleAttendanace.Web
    • SilmpleAttendanace
      • App.xaml
      • App.xaml.cs
      • Assets
      • Behaviors
      • Bin
        • Debug
          • AppManifest.xaml
          • ar
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • bg
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • ca
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • cs
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • da
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • de
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.Navigation.resources.dll
            • System.Windows.Controls.resources.dll
            • System.Windows.Data.resources.dll
          • el
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • es
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.Navigation.resources.dll
            • System.Windows.Controls.resources.dll
            • System.Windows.Data.resources.dll
          • et
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • eu
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • fi
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • fr
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.Navigation.resources.dll
            • System.Windows.Controls.resources.dll
            • System.Windows.Data.resources.dll
          • he
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • hr
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • hu
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • id
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • it
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.Navigation.resources.dll
            • System.Windows.Controls.resources.dll
            • System.Windows.Data.resources.dll
          • ja
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.Navigation.resources.dll
            • System.Windows.Controls.resources.dll
            • System.Windows.Data.resources.dll
          • ko
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.Navigation.resources.dll
            • System.Windows.Controls.resources.dll
            • System.Windows.Data.resources.dll
          • lt
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • lv
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • Microsoft.Expression.Interactions.dll
          • Microsoft.Expression.Interactions.xml
          • ms
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • nl
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • no
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • pl
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • pt
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • pt-BR
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • ro
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • ru
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.Navigation.resources.dll
            • System.Windows.Controls.resources.dll
            • System.Windows.Data.resources.dll
          • SimpleAttendance.dll
          • SimpleAttendance.pdb
          • SimpleAttendance.xap
          • sk
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • sl
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • sr-Cyrl-CS
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • sr-Latn-CS
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • sv
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • System.ComponentModel.DataAnnotations.dll
          • System.ComponentModel.DataAnnotations.xml
          • System.Windows.Controls.Data.dll
          • System.Windows.Controls.Data.Input.dll
          • System.Windows.Controls.Data.Input.xml
          • System.Windows.Controls.Data.xml
          • System.Windows.Controls.dll
          • System.Windows.Controls.Input.dll
          • System.Windows.Controls.Input.xml
          • System.Windows.Controls.Navigation.dll
          • System.Windows.Controls.Navigation.xml
          • System.Windows.Controls.xml
          • System.Windows.Data.dll
          • System.Windows.Data.xml
          • System.Windows.Interactivity.dll
          • System.Windows.Interactivity.xml
          • TestPage.html
          • th
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • tr
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • uk
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • vi
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.resources.dll
          • Wintellect.Sterling.dll
          • Wintellect.Sterling.pdb
          • zh-Hans
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.Navigation.resources.dll
            • System.Windows.Controls.resources.dll
            • System.Windows.Data.resources.dll
          • zh-Hant
            • System.ComponentModel.DataAnnotations.resources.dll
            • System.Windows.Controls.Data.Input.resources.dll
            • System.Windows.Controls.Data.resources.dll
            • System.Windows.Controls.Input.resources.dll
            • System.Windows.Controls.Navigation.resources.dll
            • System.Windows.Controls.resources.dll
            • System.Windows.Data.resources.dll
        • Release
      • Classes
      • Controls
      • Converters
      • Database
      • Images
        • backgroundshadow.png
        • backgroundtexture.png
      • obj
      • Properties
      • SimpleAttendance.csproj
      • SimpleAttendance.csproj.user
      • ViewModels
      • Views
    • SimpleAttendance.sln
    • Wintellect.Sterling
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Windows.Data;
using System.ComponentModel;
using System.Collections.ObjectModel;
using System.Windows.Input;

namespace SimpleAttendance
{
    public class OverviewModel : INotifyPropertyChanged
    {
        public OverviewModel()
        {
            // Set the command properties
            ComputeTotalsCommand = new DelegateCommand(ComputeTotals, CanComputeTotals);
        }

        #region ComputeTotalsCommand
        public ICommand ComputeTotalsCommand { get; set; }
        public void ComputeTotals(object param)
        {
            if (!(DesignerProperties.IsInDesignTool))
            {
                LoadData();
            }
        }

        private bool CanComputeTotals(object param)
        {
            return true;
        }
        #endregion

        // Operations

        #region LoadData
        public void LoadData()
        {
            bool hasKeys = false;
            foreach (var item in SterlingService.Current.Database.Query<Student, int>())
            {
                hasKeys = true;
                break;
            }

            if (hasKeys)
            {
                // Clear All Collections
                Students.Clear();
                Enrollments.Clear();
                colAttendance.Clear();
                colStudentOverview.Clear();

                // Get the data
                foreach (var item in SterlingService.Current.Database.Query<Student, int>())
                {
                    Students.Add(item.LazyValue.Value);
                }

                foreach (var item in SterlingService.Current.Database.Query<Enrollment, int>())
                {
                    Enrollments.Add(item.LazyValue.Value);
                }

                foreach (var item in SterlingService.Current.Database.Query<Attendance, string>())
                {
                    colAttendance.Add(item.LazyValue.Value);
                }


                // Create the Query
                var result = from Student in Students
                             select new StudentOverview
                             {
                                 StudentId = Student.StudentId,
                                 Name = Student.Name,
                                 P = (from objEnrollment in Enrollments
                                      from objAttendance in colAttendance
                                      where objEnrollment.StudentId == Student.StudentId
                                      where objEnrollment.EnrollmentId == objAttendance.EnrollmentId
                                      where objAttendance.AttendanceStatus == "P"
                                      select objAttendance).Count(),
                                 T = (from objEnrollment in Enrollments
                                      from objAttendance in colAttendance
                                      where objEnrollment.StudentId == Student.StudentId
                                      where objEnrollment.EnrollmentId == objAttendance.EnrollmentId
                                      where objAttendance.AttendanceStatus == "T"
                                      select objAttendance).Count(),
                                 E = (from objEnrollment in Enrollments
                                      from objAttendance in colAttendance
                                      where objEnrollment.StudentId == Student.StudentId
                                      where objEnrollment.EnrollmentId == objAttendance.EnrollmentId
                                      where objAttendance.AttendanceStatus == "E"
                                      select objAttendance).Count(),
                                 U = (from objEnrollment in Enrollments
                                      from objAttendance in colAttendance
                                      where objEnrollment.StudentId == Student.StudentId
                                      where objEnrollment.EnrollmentId == objAttendance.EnrollmentId
                                      where objAttendance.AttendanceStatus == "U"
                                      select objAttendance).Count(),
                             };

                // Fill the final Collection
                foreach (var Student in result)
                {
                    colStudentOverview.Add(Student);
                }
            }
        }
        #endregion

        // Properties (View Models)

        #region MainPageModelVM
        private MainPageModel _MainPageModelVM;
        public MainPageModel MainPageModelVM
        {
            get { return _MainPageModelVM; }
            set
            {
                if (MainPageModelVM == value)
                {
                    return;
                }
                _MainPageModelVM = value;
                this.NotifyPropertyChanged("MainPageModelVM");
            }
        }
        #endregion

        // Collections

        #region colStudentOverview
        private ObservableCollection<StudentOverview> _colStudentOverview
            = new ObservableCollection<StudentOverview>();
        public ObservableCollection<StudentOverview> colStudentOverview
        {
            get { return _colStudentOverview; }
            private set
            {
                if (colStudentOverview == value)
                {
                    return;
                }
                _colStudentOverview = value;
                this.NotifyPropertyChanged("colStudentOverview");
            }
        }
        #endregion

        #region Students
        private ObservableCollection<Student> _Students
            = new ObservableCollection<Student>();
        public ObservableCollection<Student> Students
        {
            get { return _Students; }
            private set
            {
                if (Students == value)
                {
                    return;
                }
                _Students = value;
                this.NotifyPropertyChanged("Students");
            }
        }
        #endregion

        #region Enrollments
        private ObservableCollection<Enrollment> _Enrollments
            = new ObservableCollection<Enrollment>();
        public ObservableCollection<Enrollment> Enrollments
        {
            get { return _Enrollments; }
            private set
            {
                if (Enrollments == value)
                {
                    return;
                }
                _Enrollments = value;
                this.NotifyPropertyChanged("Enrollments");
            }
        }
        #endregion

        #region colAttendance
        private ObservableCollection<Attendance> _colAttendance
            = new ObservableCollection<Attendance>();
        public ObservableCollection<Attendance> colAttendance
        {
            get { return _colAttendance; }
            set
            {
                if (colAttendance == value)
                {
                    return;
                }
                _colAttendance = value;
                this.NotifyPropertyChanged("colAttendance");
            }
        }
        #endregion

        // Utility

        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(String info)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(info));
            }
        }
        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)


Written By
Software Developer (Senior) http://ADefWebserver.com
United States United States
Michael Washington is a Microsoft MVP. He is a ASP.NET and
C# programmer.
He is the founder of
AiHelpWebsite.com,
LightSwitchHelpWebsite.com, and
HoloLensHelpWebsite.com.

He has a son, Zachary and resides in Los Angeles with his wife Valerie.

He is the Author of:

Comments and Discussions