ݺߣ

ݺߣShare a Scribd company logo
РАЗРАБОТКА НА
МНОГОСЛОЙНИ
ПРИЛОЖЕНИЯ
Цветелин Павлов
Презентациите от курса




http://www.slideshare.net/cpavlov
Скица на приложението
План на курса

Обща информация, определения
Сценарий за разработка
Разработка на базата данни и обектния домейн
Създаване на функционалностите за работа със
 студентски данни
  Създаване на формуляр за редакция
• Разработка на функционалностите за работа с
 оценки
Скица на приложението
METRO UI
Metro User Interface
Metro User Interface
Windows 8 User Interface
Metro User Interface
Windows 8 User Interface
      Modern UI
Windows 8 Start Menu
Zune Player
Cookbook
Windows Phone
Facebook for Windows Phone
ձк
DevExpress
DotNetBar
Metro UI


• Не се подчинява на концепцията „физически
  прозорец“
• „Съдържанието е господар“ / “Content before
  chrome”
• Една задача на екран
• Големи контроли, удобни и при работа с
  устройства, реагиращи на докосване
Списък студенти
Редакция на студент
Списък оценки
Редакция на оценка
УПРАЖНЕНИЕ № 3
Създаване на формуляр за редакция
Проект




http://www.uni-ruse.bg/info-sys/lab-3.zip
План на упражнението



• Създаване на формуляр за редакция на данните
  на студент
• Валидация на формуляра
• Добавяне на снимка
ФОРМУЛЯР ЗА
РЕДАКЦИЯ
Имплементиране на функционалностите за
редакция на данните на студент
VIEW
StudentEditView.xaml
Етикети

<Label Content="Факултетен номер" Margin="8"/>

<Label Content="Собствено име" Margin="8"
    Grid.Row="1"/>

<Label Content="Фамилия" Margin="8"
    Grid.Row="2"/>
Поле за факултетен номер


<TextBox
    Text="{Binding Path=StudentID,Mode=TwoWay}"
    IsEnabled="{Binding Path=IsNew}"
    Grid.Column="1"
    MinWidth="60"
    Margin="8" />
Поле за собствено име


<TextBox
    Text="{Binding Path=FirstName,Mode=TwoWay}"
    Grid.Column="1" Grid.Row="1"
    Grid.ColumnSpan="2"
    Margin="8" />
Поле за фамилия


<TextBox
    Text="{Binding Path=LastName, Mode=TwoWay}"
    Grid.Column="1" Grid.Row="2"
    Grid.ColumnSpan="2"
    Margin="8" />
Бутон за запазване

<Button
    Command="{Binding Path=SaveStudent}"
    Content="Запази"
    Grid.Column="2" Grid.Row="3" Margin="8"
    Height="24" Width="104"
    Style="{DynamicResource SquareButtonStyle}"
/>
VIEW MODEL
StudentEditViewModel.vb
Обработчик на командата


Private Sub whenSaveStudent()
    Model.SaveStudent(Student)
    theMediator.DoRefresh()
    theMediator.SetTab(0)
End Sub
ВАЛИДАЦИЯ
Гледката с формуляра
Валидацията в действие
VIEW MODEL
StudentEditViewModel.vb
Имплементиране на IDataErrorInfo

Public Class StudentEditViewModel
    Inherits ViewModelBase
    Implements IStudentEditViewModel
    Implements IInterestedInStudent
    Implements IDataErrorInfo

[…]

End Class
Свойството Error


Public ReadOnly Property [Error] As String
Implements IDataErrorInfo.Error
    Get
        Return String.Empty
    End Get
End Property
Помощната функция
Private Function TestString(
    regEx As String,
    value As String,
    message As String
) As String
    If value IsNot Nothing Then
        Dim regExp As New Regex(regEx)
        If Not regExp.IsMatch(value) Then
             Return message
        End If
    End If
    Return String.Empty
End Function
Свойството Item
Default Public ReadOnly Property
Item(columnName As String) As String Implements
IDataErrorInfo.Item
    Get
        Select Case columnName
             Case "StudentID"
             Case "FirstName"
             Case "LastName"
        End Select
        Return String.Empty
    End Get
End Property
Свойството Item

[…]
       Select Case columnName
           Case "StudentID"

Return TestString("^d{6}$", StudentID,
"Некоректно въведен факултетен номер")

[…]
Свойството Item

[…]
       Select Case columnName
           Case "FirstName"

Return TestString("^[p{IsCyrillic}]{3,50}$",
FirstName, "Некоректно въведено собствено име")

[…]
Свойството Item

[…]
       Select Case columnName
           Case "LastName"

Return TestString("^[p{IsCyrillic}]{3,100}$",
LastName, "Некоректно въведена фамилия")

[…]
2ри обработчик на командата


Private Function canSaveStudent() As Boolean
    Return IsChanged _
    AndAlso Me("StudentID") = String.Empty _
    AndAlso Me("FirstName") = String.Empty _
    AndAlso Me("LastName") = String.Empty
End Function
VIEW
StudentEditView.xaml
Поле за факултетен номер
<TextBox
    Text="{Binding Path=StudentID,
         Mode=TwoWay,
         ValidatesOnDataErrors=True,
         NotifyOnValidationError=True,
         UpdateSourceTrigger=PropertyChanged}"
    IsEnabled="{Binding Path=IsNew}"
    Grid.Column="1"
    MinWidth="60"
    Margin="8" />
Поле за собствено име

<TextBox
    Text="{Binding Path=FirstName,
         Mode=TwoWay,
         ValidatesOnDataErrors=True,
         NotifyOnValidationError=True,
         UpdateSourceTrigger=PropertyChanged}"
    Grid.Column="1" Grid.Row="1"
    Grid.ColumnSpan="2"
    Margin="8" />
Поле за фамилия

<TextBox
    Text="{Binding Path=LastName,
         Mode=TwoWay,
         ValidatesOnDataErrors=True,
         NotifyOnValidationError=True,
         UpdateSourceTrigger=PropertyChanged}"
    Grid.Column="1" Grid.Row="2"
    Grid.ColumnSpan="2"
    Margin="8" />
СНИМКА
Визуализация на снимка
VIEW
StudentEditView.xaml
Снимка
<StackPanel
    Orientation="Vertical"
    Grid.Column="3" Grid.RowSpan="5">

   <Label Content="Снимка:" />
   <Border
       BorderThickness="1" BorderBrush="Black"
       Margin="8" Padding="0">
       <Image
           Source="{Binding Path=PhotoURL}"
           Stretch="UniformToFill"
           Margin="0" />
   </Border>

</StackPanel>
КОМПИЛИРАЙТЕ
И
ТЕСТВАЙТЕ
КРАЙ НА
УПРАЖНЕНИЕ № 3
Цветелин Павлов
pavlov@ecs.uni-ruse.bg

More Related Content

Информационни системи - упражнение № 3