#眉標=Silverlight 3.0、DataForm、DataAnnotations
#副標=Silverlight 3.0技術應用(2)
#大標=Silverlight 3加入資料庫存取機制
#作者=文/圖 董大偉
===<反灰>=============
================
===<反灰>=============
Dim PhoneBookRec1 As New PhoneBookItem With {.Name = "David", .Tel = "0912345678"}
txb_name.DataContext = PhoneBookRec1
================
================
程式1
'一筆資料的結構
Public Class PhoneBookItem
Implements System.ComponentModel.IEditableObject, _
System.ComponentModel.INotifyPropertyChanged
'Name屬性
Private _Name As String
Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
OnPropertyChanged("Name")
End Set
End Property
'Tel屬性
Private _Tel As String
Property Tel() As String
Get
Return _Tel
End Get
Set(ByVal value As String)
_Tel = value
OnPropertyChanged("Tel")
End Set
End Property
(…略…)
Public Sub BeginEdit() Implements System.ComponentModel.IEditableObject.BeginEdit
(…略…)
End Sub
Public Sub CancelEdit() Implements System.ComponentModel.IEditableObject.CancelEdit
(…略…)
End Sub
Public Sub EndEdit() Implements System.ComponentModel.IEditableObject.EndEdit
(…略…)
End Sub
Protected Sub OnPropertyChanged(ByVal propName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
End Sub
Public Event PropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs) Implements PropertyChanged
End Class
================
================
程式2
Public Class AddressBook
Inherits ObservableCollection(Of AddressBookItem)
(…略…)
End Class
================
===<反灰>=============
Private _cName As String
Private _Mobile As String
Private _TelHome As String
Private _TelOffice As String
Private _Birthday As Date
Private _Children As Integer
Private _isMarried As Boolean
Private _Sex As SexType
================
================
程式3
Public Class AddressBookItem
Implements System.ComponentModel.IEditableObject,_
System.ComponentModel.INotifyPropertyChanged
//別忘了物件必須實作這兩個介面
Sub New()
End Sub
Private _Birthday As Date
Public Property Birthday() As Date
Get
Return _Birthday
End Get
Set(ByVal value As Date)
_Birthday = value
OnPropertyChanged("Birthday")
//別忘了要觸發PropertyChanged事件
End Set
End Property
(…其他屬性…略…)
#Region "IEditableObject介面" //IEditableObject介面實作部分
Public Sub BeginEdit() Implements IEditableObject.BeginEdit
End Sub
Public Sub CancelEdit() Implements IEditableObject.CancelEdit
End Sub
Public Sub EndEdit() Implements IEditableObject.EndEdit
End Sub
#End Region
#Region "INotifyPropertyChanged介面"
//INotifyPropertyChanged介面實作部分
Public Event PropertyChanged(ByVal sender As Object, ByVal e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
Protected Sub OnPropertyChanged(ByVal propName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
End Sub
#End Region
End Class
================
===<反灰>=============
Public Class AddressBook
Inherits System.Collections.ObjectModel.ObservableCollection(Of AddressBookItem)
//AddressBookItem是我們剛才設計好的物件,現在建立該物件的集合
Sub New()
End Sub
End Class
================
================
程式4
================
================
程式5
Dim AddressBook As AddressBook //宣告集合物件
Sub init()
AddressBook = New AddressBook //建立物件實體
Dim AddressBookItem1 As New AddressBookItem //填入第一筆資料
AddressBookItem1.Birthday = "1970/1/30"
AddressBookItem1.Children = 2
AddressBookItem1.CName = "Eric"
AddressBookItem1.Mobile = "0933111111"
AddressBookItem1.Sex = SexType.男性
AddressBookItem1.TelHome = "02-12345678"
AddressBookItem1.TelOffice = "02-12343333"
AddressBookItem1.IsMarried = False
AddressBook.Add(AddressBookItem1)
(其餘兩筆資料…略…)
End Sub
Private Sub Button_Load_Click(ByVal sender as Object, ByVal e as System.Windows.RoutedEventArgs)
init()
Me.DataForm1.ItemsSource = AddressBook
End Sub
================
===<反灰>=============
_
Public Property CName() As String
(…略…)
End Property
================
================
程式6
_
//Name是顯示標題(抬頭)
//Order是顯示順序
//Description則是說明文字
Public Property Birthday() As Date
(…略…)
End Property
_
//Required可以描述該欄位是必填欄位
//而StringLength則可限制可輸入的字串長度
Public Property CName() As String
(…略…)
End Property
_
//RegularExpression可支援規則運算式
//例如上面這個規則運算式要求行動電話一定要符合09xx-123456的形式
Public Property Mobile() As String
(…略…)
End Property
================
===<反灰>=============
_
Public Property Birthday() As Date
Get
Return _Birthday
End Get
Set(ByVal value As Date)
If value > Now Then
Throw New InvalidOperationException("生日不應該晚於今天...")
End If
//若需要也可以自行撰寫驗證程式碼,DataForm也會買單
_Birthday = value
OnPropertyChanged("Birthday")
End Set
End Property
================
================
程式7
//可在DataTemplate中隨意放置需要的控件
//然後再利用Mark-up語法設定Binding
(…略…)
(…略…)
================