#眉標=Silverlight #副標=Silverlight開發技術(10) #大標= Silverlight 2.0資料繫結技術與IsolatedStorage #作者=文/圖 董大偉    ============= 程式1 ================ ==<反灰>=========== 控件名稱.DataContext = Object ================ ============= 程式2 '一筆資料的結構 Class PhoneBookItem 'Name屬性 Private _Name As String Property Name() As String Get Return _Name End Get Set(ByVal value As String) _Name = value End Set End Property (…略…) End Class ================ ============= 程式3 Dim PhoneBookRec As New PhoneBookItem With {.Name = "David", .Tel = "0912345678"} txb_name.DataContext = PhoneBookRec ================ ============= 程式4 '一筆資料的結構 Class PhoneBookItem Implements System.ComponentModel.INotifyPropertyChanged 'Name屬性 Private _Name As String Property Name() As String Get Return _Name End Get Set(ByVal value As String) _Name = value RaiseEvent PropertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs("Name")) End Set End Property (…略…) '實作 Public Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged End Class ================ ===<反灰>============= '通訊錄陣列(內含多筆資料) Dim PhoneBooks() As PhoneBookItem Dim DataIdx As Integer = 0 ================ ============= 程式5 '顯示下一筆 Private Sub Btn_Next_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Btn_Next.Click DataIdx += 1 If DataIdx > PhoneBooks.Length - 1 Then DataIdx -= 1 ShowData() End Sub '顯示上一筆 Private Sub Btn_previous_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Btn_previous.Click DataIdx -= 1 If DataIdx < 0 Then DataIdx = 0 ShowData() End Sub '依照DataIdx顯示資料 Sub ShowData() Me.lbl_idx.Text = "第" & DataIdx + 1 & "筆 共" & PhoneBooks.Length & "筆" Me.txb_name.DataContext = PhoneBooks(DataIdx) Me.txb_Tel.DataContext = PhoneBooks(DataIdx) End Sub ================ ============= 程式6 '通訊錄集合 Dim PhoneBookCollectionValue As System.Collections.ObjectModel.ObservableCollection(Of PhoneBookItem) Public ReadOnly Property PhoneBookCollection() As System.Collections.ObjectModel.ObservableCollection(Of PhoneBookItem) Get If PhoneBookCollectionValue Is Nothing Then '如果不存在(第一次調用)則建立物件實體 PhoneBookCollectionValue = New System.Collections.ObjectModel.ObservableCollection(Of PhoneBookItem) End If Return PhoneBookCollectionValue End Get End Property ================ ============= 程式7 ================ ============= 程式8 '動態設定PhoneBookCollection作為ListBox的資料來源 Me.ListBox1.DataContext = PhoneBookCollection '新增三筆測試資料 PhoneBookCollection.Add(New PhoneBookItem With {.Name = "董大偉", .Tel = "0911223344"}) PhoneBookCollection.Add(New PhoneBookItem With {.Name = "董小偉", .Tel = "0911223345"}) PhoneBookCollection.Add(New PhoneBookItem With {.Name = "林小妙", .Tel = "0911223346"}) PhoneBookCollection.Add(New PhoneBookItem With {.Name = "張小春", .Tel = "0911223347"}) PhoneBookCollection.Add(New PhoneBookItem With {.Name = "沈中保", .Tel = "0911223348"}) ================ ============= 程式9 '建立store Dim store = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication() '建立虛擬的檔案 Dim fs = store.CreateFile("Mydata.dat") '建立檔案寫入的串流物件 Dim sw As IO.StreamWriter = New IO.StreamWriter(fs) Dim buf As String = "" '將記憶體中的資料組成字串   For Each Item As PhoneBookItem In PhoneBooks   buf += Item.Name + Chr(0) + Item.Tel   buf += vbCr   Next '寫入檔案中   sw.Write(buf)   sw.Close()   fs.Close() ================ ============= 程式10 '建立store Dim store = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication() '如果找不到先前儲存的檔案   If store.FileExists("Mydata.dat") = False Then '則直接進行資料初始化   initData()   Exit Function   End If '開始讀檔   Dim fs = store.OpenFile("Mydata.dat", IO.FileMode.Open) '透過串流機制讀檔   Dim sr As IO.StreamReader = New IO.StreamReader(fs) '將讀取出的資料放入暫存位置   Dim buf As String = sr.ReadToEnd   Dim lines() As String   lines = buf.Split(vbCr)   ReDim PhoneBooks(lines.Length - 2)   Dim idx As Integer Try '進行parse並且填入通訊錄陣列   For Each line As String In lines   If line.Trim <> "" Then   PhoneBooks(idx) = New PhoneBookItem   Dim items() As String = line.Split(Chr(0))   PhoneBooks(idx).Name = items(0)   PhoneBooks(idx).Tel = items(1)   End If   idx += 1   Next   Catch ex As Exception   '資料初始化   initData()   Windows.Browser.HtmlPage.Window.Alert("讀取資料有誤!!!")   End Try   sr.Close()   fs.Close() ================ ============= 程式11 Function initData() As Boolean '資料初始化 ReDim Preserve PhoneBooks(10) '為每一筆記錄建立實體 For i = 0 To PhoneBooks.Length - 1 PhoneBooks(i) = New PhoneBookItem() Next End Function ================