25
Data binding trong Windows Phone 8 Lập Trình Di Động Data binding (liên kết dữ liệu) là một trong những cách đơn giản để ứng dụng của bạn hiển thị và tương tác với dữ liệu. Việc tách riêng phần giao diện (UI) và dữ liệu (data) sẽ mang lại sự thuận tiện khi thiết kế giao diện cũng như là khi viết mã quản lý dữ liệu. Khi có một kết nối (connection) giữa phần giao diện với phần dữ liệu thì những thay đổi từ một phía sẽ được cập nhật ở phía còn lại. Ví dụ, bạn dùng một TextBox để hiển thị tên của người dùng, TextBox này được liên kết (bind) với thuộc tính Name của một đối tượng người dùng, nếu bạn nhập một tên khác vào TextBox thì giá trị này sẽ được cập nhật tự động vào thuộc tính Name. Tương tự như vậy, nếu bạn thay đổi giá trị của Name thì giá trị này sẽ cập nhật lên TextBox. Data binding được sử dụng ở trong rất nhiều trường hợp: khi bạn muốn hiển thị danh sách các bài hát với ListBox (hoặc LongListSelector), hiển thị tên người dùng với TextBlock, hiển thị ảnh với Image v.v. Trong bài viết này chúng ta sẽ dùng những ví dụ nhỏ để minh họa cho các trường hợp bạn hay sử dụng Data binding. Kết nối Giao diện với Dữ liệu Để tạo một liên kết thì bạn cần có đối tượng nguồn (Binding Source) và đối tượng đích (Binding Target), hãy thử quan sát hình sau:

Data binding trong windows phone 8

Embed Size (px)

Citation preview

Page 1: Data binding trong windows phone 8

Data binding trong Windows Phone 8

Lập Trigravenh Di

Động

Data binding (liecircn

kết dữ liệu) lagrave một

trong những caacutech

đơn giản để ứng

dụng của bạn hiển

thị vagrave tương taacutec với

dữ liệu Việc taacutech

riecircng phần giao

diện (UI) vagrave dữ

liệu (data) sẽ mang

lại sự thuận tiện

khi thiết kế giao

diện cũng như lagrave

khi viết matilde quản lyacute

dữ liệu

Khi coacute một kết nối (connection) giữa phần giao diện với phần dữ liệu thigrave những thay đổi từ

một phiacutea sẽ được cập nhật ở phiacutea cograven lại Viacute dụ bạn dugraveng một TextBox để hiển thị tecircn của

người dugraveng TextBox nagravey được liecircn kết (bind) với thuộc tiacutenh Name của một đối tượng người

dugraveng nếu bạn nhập một tecircn khaacutec vagraveo TextBox thigrave giaacute trị nagravey sẽ được cập nhật tự động vagraveo

thuộc tiacutenh Name Tương tự như vậy nếu bạn thay đổi giaacute trị của Name thigrave giaacute trị nagravey sẽ cập

nhật lecircn TextBox

Data binding được sử dụng ở trong rất nhiều trường hợp khi bạn muốn hiển thị danh saacutech caacutec

bagravei haacutet với ListBox (hoặc LongListSelector) hiển thị tecircn người dugraveng với TextBlock hiển thị

ảnh với Image vv Trong bagravei viết nagravey chuacuteng ta sẽ dugraveng những viacute dụ nhỏ để minh họa cho caacutec

trường hợp bạn hay sử dụng Data binding

Kết nối Giao diện với Dữ liệu

Để tạo một liecircn kết thigrave bạn cần coacute đối tượng nguồn (Binding Source) vagrave đối tượng điacutech

(Binding Target) hatildey thử quan saacutet higravenh sau

Binding Source coacute thể lagrave bất cứ một đối tượng nagraveo noacute chứa dữ liệu magrave sẽ được liecircn kết đến

Binding Target

Để coacute thể trở thagravenh Binding Target thigrave đối tượng giao diện phải lagrave một FrameworkElement

cograven thuộc tiacutenh của noacute phải lagrave một DependencyProperty Viacute dụ TextBlock lagrave một đối tượng

của FrameworkElement cograven thuộc tiacutenh Text của noacute lagrave một DependencyProperty

Trong một liecircn kết thigrave chuacuteng ta coacute thể xaacutec định caacutec thuộc tiacutenh cơ bản sau

1 Đối tượng nguồn (Binding Source) đối tượng điacutech (Binding Target)

2 Chiều của dữ liệu Việc nagravey được thực hiện thocircng qua thuộc tiacutenh BindingMode

3 Đối tượng converter Đacircy lagrave đối tượng được sử dụng để thực hiện việc chuyển đổi giaacute

trị của Binding Source sang một giaacute trị khaacutec được sử dụng cho Binding Target vagrave

ngược lại Một converter phải lagrave một đối tượng của IValueConverter

Ngoagravei ra thigrave cograven coacute một số thuộc tiacutenh khaacutec được mocirc tả chi tiết trong lớp Binding

Viacute dụ lớp Song coacute thuộc tiacutenh lagrave Title vagrave bacircy giờ chuacuteng ta muốn hiển thị tecircn của bagravei haacutet trecircn

một TextBlock thigrave sẽ lagravem như sau

XAML

1 ltTextBlock xName=songTitle Text=Binding Title Mode=OneWay gt

C

1

2

3

4

Song song = new Song() songTitle = Like A Rose txtTitleDataContext = song

Việc tạo liecircn kết được thực hiện trong file XAML bằng caacutech sử dụng cuacute phaacutep =rdquoBinding hellip

Sau đoacute thigrave nguồn dữ liệu sẽ được xaacutec định thocircng qua việc thay đổi giaacute trị của thuộc tiacutenh

DataContext của TextBlock

Giaacute trị của DataContext sẽ được kế thừa từ caacutec thagravenh phần cha đến caacutec thagravenh phần con Viacute dụ

XAML

1

2

3

ltGrid xName=gridSong gt ltTextBlock xName=txtTitle Text=Binding Title Mode=OneWay gt ltGridgt

C

1

2

3

4

5

Song song = new Song() songTitle = Like A Rose gridSongDataContext = song

Trong trường hợp nagravey chuacuteng ta đatilde gaacuten giaacute trị cho thuộc tiacutenh DataContext của Grid nhưng giaacute

trị nagravey cũng sẽ được giữ nguyecircn cho TextBlock Nếu bạn khocircng muốn sử dụng giaacute trị được kế

thừa từ Grid thigrave đơn giản chỉ cần gaacuten giaacute trị khaacutec cho thuộc tiacutenh DataContext của noacute

Chiều của liecircn kết

Coacute ba giaacute trị magrave chuacuteng ta coacute thể sử dụng cho thuộc tiacutenh Mode

1 OneTime Binding Target sẽ được cập nhật một lần duy nhất khi liecircn kết được khởi

tạo

2 OneWay Binding Target sẽ được cập nhật khi liecircn kết được khởi tạo vagrave mỗi khi giaacute trị

của Binding Source được thay đổi

3 TwoWay Sự thay đổi giaacute trị của Binding Source sẽ được cập nhật lecircn Binding Target

vagrave theo chiều ngược lại

Để việc cập nhật giaacute trị được thực hiện một caacutech tự động thigrave đối tượng Binding Source phải

triển khai interface INotifyPropertyChanged

Interface INotifyPropertyChanged coacute một event lagrave PropertyChanged event nagravey sẽ lagravem nhiệm

vụ thocircng baacuteo cho Binding Target biết để cập nhật mỗi khi coacute sự thay đổi giaacute trị ở Binding

Source Hatildey quan saacutet caacutech sử dụng INotifyPropertyChanged trong lớp Song

1

2

3

4

5

6

7

public class Song INotifyPropertyChanged private string _title public String Title get return this_title

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

set this_title = value NotifyPropertyChanged(Title) public event PropertyChangedEventHandler PropertyChanged public void NotifyPropertyChanged(string propertyName) if (PropertyChanged = null) PropertyChanged(this new PropertyChangedEventArgs(propertyName))

Mỗi khi giaacute trị của Title được thay đổi thigrave event PropertyChanged

sẽ được tung ra vagrave như vậy giaacute trị mới nagravey sẽ được cập nhật lecircn TextBlock

Trong trường hợp nagravey liecircn kết của chuacuteng ta lagrave OneWay cho necircn dữ liệu chỉ được cập nhật

theo hướng từ Binding Source đến Binding Target Nếu ta thay TextBlock bằng một TextBox

đồng thời chuyển Mode của noacute thagravenh TwoWay thigrave khi ta thay đổi giaacute trị của TextBox giaacute trị

mới nagravey sẽ được cập nhật ngay cho thuộc tiacutenh Title của đối tượng song

Liecircn kết với Collection

Thay vigrave chỉ liecircn kết với một bagravei haacutet nếu chuacuteng ta muốn hiển thị một danh saacutech bagravei haacutet thigrave coacute

thể tạo liecircn kết tới một ListltSonggt

XAML

1

2

3

4

5

6

7

ltphoneLongListSelector xName=listSong ItemsSource=Binding Songsgt ltphoneLongListSelectorItemTemplategt ltDataTemplategt ltTextBlock Text=Binding Title gt ltDataTemplategt ltphoneLongListSelectorItemTemplategt ltphoneLongListSelectorgt

C

1

2

3

4

5

6

7

8

public class Album public List Songs get set

public Album() thisSongs = new List()

vagrave

1

2

3

4

5

Album album = new Album() albumSongsAdd(new Song Title = Like A Rose ) albumSongsAdd(new Song Title = Như Chưa Từng Yecircu ) albumSongsAdd(new Song Title = Mugravea Yecircu Đầu ) listSongDataContext = album

Trong trường hợp ta sử dụng List như trecircn thigrave nếu ta thecircm một đối tượng Song mới đối tượng

nagravey sẽ khocircng được cập nhật lecircn LongListSelector Để việc nagravey xảy ra chuacuteng ta hatildey sử dụng

ObservableCollectionltTgt thay cho List

C

1

2

3

4

5

6

7

public class Album public ObservableCollection Songs get set public Album() thisSongs = new ObservableCollection()

Chuyển đổi giaacute trị

Coacute những trường hợp bạn muốn hiển thị dữ liệu (ở Binding Target) theo một caacutech khaacutec so với

caacutech magrave bạn đang lưu trữ noacute (ở Binding Source) Viacute dụ bạn coacute điểm thi của một mocircn học nằm

trong khoảng 0 ndash 10 nhưng lại khocircng muốn hiển thị điểm số magrave hiển thị phacircn loại của noacute

(keacutem trung bigravenh khaacute giỏihellip) bạn coacute matilde một quốc gia (vn us cnhellip) nhưng lại muốn hiển thị

tecircn của quốc gia đoacutehellipcaacutech thuận tiện nhất để thực hiện việc nagravey đoacute lagrave sử dụng một đối tượng

IValueConverter

C

1

2

3

public class CountryConverterIValueConverter public object Convert(object value Type targetType object parameter

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

SystemGlobalizationCultureInfo culture) string code = (string)value switch (code) case vn return Vietnam case us return United State case cn return China case jp return Japan default return Other country public object ConvertBack(object value Type targetType object parameter SystemGlobalizationCultureInfo culture) string country = (string)value switch (country) case Vietnam return vn case United State return us case China return cn case Japan return jp default return

XAML

1

2

3

ltphonePhoneApplicationPageResourcesgt ltUtilsCountryConverter xKey=CountryConvertergt ltphonePhoneApplicationPageResourcesgt

Vagrave

1 ltTextBlock xName=txtCountry Text=Binding Code Converter=StaticResource CountryConverter gt

Khi dữ liệu được chuyển từ Binding Source đến Binding Target thigrave phương thức Convert()

được sử dụng cograven theo chiều ngược lại thigrave phương thức ConvertBack() sẽ được sử dụng

Để biết thecircm về caacutec chi tiết khi cagravei đặt Data binding trecircn Windows Phone bạn coacute thể tham

khảo thecircm caacutec viacute dụ rất cụ thể ở đacircy httpmsdnmicrosoftcomen-

uslibrarywindowsphonedevelopjj20702328v=vs10529aspx

Tigravem hiểu về Local Database trong Windows Phone

Lập Trigravenh Di Động

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng

dụng từ Web đến Windows khocircng thể thiếu database để lưu

trữ vagrave đối với Windows Phone cũng vậy Windows Phone hổ

trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở

phiecircn bản 70 đến phiecircn bản 71 trở về sau Windows Phone

hổ trợ thecircm một caacutech lưu trữ nữa magrave caacutec lập trigravenh viecircn ưa

thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ

dữ liệu trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey

đều lagrave caacutech lưu trữ phiacutea local của phone

1 Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to SQL

cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua SystemDataLinqDataContext

caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được cung cấp thocircng qua lớp Datacontext giuacutep

chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ liệu

chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2 Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao gồm lớp

kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ trong ứng dụng

Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo những

namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu ngoặc vuocircng

ldquo[]rdquo nhưng [Table][Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec

đối tượng dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn từ msdn

của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei dograveng code

magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn (ConnectionString)

ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder trong ứng dụng sau đoacute

kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem CreateDatabase() đecirc tạo cơ sở dữ liệu

4 Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể thao khảo

cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu khocircng

gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao taacutec thay

đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 2: Data binding trong windows phone 8

Binding Source coacute thể lagrave bất cứ một đối tượng nagraveo noacute chứa dữ liệu magrave sẽ được liecircn kết đến

Binding Target

Để coacute thể trở thagravenh Binding Target thigrave đối tượng giao diện phải lagrave một FrameworkElement

cograven thuộc tiacutenh của noacute phải lagrave một DependencyProperty Viacute dụ TextBlock lagrave một đối tượng

của FrameworkElement cograven thuộc tiacutenh Text của noacute lagrave một DependencyProperty

Trong một liecircn kết thigrave chuacuteng ta coacute thể xaacutec định caacutec thuộc tiacutenh cơ bản sau

1 Đối tượng nguồn (Binding Source) đối tượng điacutech (Binding Target)

2 Chiều của dữ liệu Việc nagravey được thực hiện thocircng qua thuộc tiacutenh BindingMode

3 Đối tượng converter Đacircy lagrave đối tượng được sử dụng để thực hiện việc chuyển đổi giaacute

trị của Binding Source sang một giaacute trị khaacutec được sử dụng cho Binding Target vagrave

ngược lại Một converter phải lagrave một đối tượng của IValueConverter

Ngoagravei ra thigrave cograven coacute một số thuộc tiacutenh khaacutec được mocirc tả chi tiết trong lớp Binding

Viacute dụ lớp Song coacute thuộc tiacutenh lagrave Title vagrave bacircy giờ chuacuteng ta muốn hiển thị tecircn của bagravei haacutet trecircn

một TextBlock thigrave sẽ lagravem như sau

XAML

1 ltTextBlock xName=songTitle Text=Binding Title Mode=OneWay gt

C

1

2

3

4

Song song = new Song() songTitle = Like A Rose txtTitleDataContext = song

Việc tạo liecircn kết được thực hiện trong file XAML bằng caacutech sử dụng cuacute phaacutep =rdquoBinding hellip

Sau đoacute thigrave nguồn dữ liệu sẽ được xaacutec định thocircng qua việc thay đổi giaacute trị của thuộc tiacutenh

DataContext của TextBlock

Giaacute trị của DataContext sẽ được kế thừa từ caacutec thagravenh phần cha đến caacutec thagravenh phần con Viacute dụ

XAML

1

2

3

ltGrid xName=gridSong gt ltTextBlock xName=txtTitle Text=Binding Title Mode=OneWay gt ltGridgt

C

1

2

3

4

5

Song song = new Song() songTitle = Like A Rose gridSongDataContext = song

Trong trường hợp nagravey chuacuteng ta đatilde gaacuten giaacute trị cho thuộc tiacutenh DataContext của Grid nhưng giaacute

trị nagravey cũng sẽ được giữ nguyecircn cho TextBlock Nếu bạn khocircng muốn sử dụng giaacute trị được kế

thừa từ Grid thigrave đơn giản chỉ cần gaacuten giaacute trị khaacutec cho thuộc tiacutenh DataContext của noacute

Chiều của liecircn kết

Coacute ba giaacute trị magrave chuacuteng ta coacute thể sử dụng cho thuộc tiacutenh Mode

1 OneTime Binding Target sẽ được cập nhật một lần duy nhất khi liecircn kết được khởi

tạo

2 OneWay Binding Target sẽ được cập nhật khi liecircn kết được khởi tạo vagrave mỗi khi giaacute trị

của Binding Source được thay đổi

3 TwoWay Sự thay đổi giaacute trị của Binding Source sẽ được cập nhật lecircn Binding Target

vagrave theo chiều ngược lại

Để việc cập nhật giaacute trị được thực hiện một caacutech tự động thigrave đối tượng Binding Source phải

triển khai interface INotifyPropertyChanged

Interface INotifyPropertyChanged coacute một event lagrave PropertyChanged event nagravey sẽ lagravem nhiệm

vụ thocircng baacuteo cho Binding Target biết để cập nhật mỗi khi coacute sự thay đổi giaacute trị ở Binding

Source Hatildey quan saacutet caacutech sử dụng INotifyPropertyChanged trong lớp Song

1

2

3

4

5

6

7

public class Song INotifyPropertyChanged private string _title public String Title get return this_title

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

set this_title = value NotifyPropertyChanged(Title) public event PropertyChangedEventHandler PropertyChanged public void NotifyPropertyChanged(string propertyName) if (PropertyChanged = null) PropertyChanged(this new PropertyChangedEventArgs(propertyName))

Mỗi khi giaacute trị của Title được thay đổi thigrave event PropertyChanged

sẽ được tung ra vagrave như vậy giaacute trị mới nagravey sẽ được cập nhật lecircn TextBlock

Trong trường hợp nagravey liecircn kết của chuacuteng ta lagrave OneWay cho necircn dữ liệu chỉ được cập nhật

theo hướng từ Binding Source đến Binding Target Nếu ta thay TextBlock bằng một TextBox

đồng thời chuyển Mode của noacute thagravenh TwoWay thigrave khi ta thay đổi giaacute trị của TextBox giaacute trị

mới nagravey sẽ được cập nhật ngay cho thuộc tiacutenh Title của đối tượng song

Liecircn kết với Collection

Thay vigrave chỉ liecircn kết với một bagravei haacutet nếu chuacuteng ta muốn hiển thị một danh saacutech bagravei haacutet thigrave coacute

thể tạo liecircn kết tới một ListltSonggt

XAML

1

2

3

4

5

6

7

ltphoneLongListSelector xName=listSong ItemsSource=Binding Songsgt ltphoneLongListSelectorItemTemplategt ltDataTemplategt ltTextBlock Text=Binding Title gt ltDataTemplategt ltphoneLongListSelectorItemTemplategt ltphoneLongListSelectorgt

C

1

2

3

4

5

6

7

8

public class Album public List Songs get set

public Album() thisSongs = new List()

vagrave

1

2

3

4

5

Album album = new Album() albumSongsAdd(new Song Title = Like A Rose ) albumSongsAdd(new Song Title = Như Chưa Từng Yecircu ) albumSongsAdd(new Song Title = Mugravea Yecircu Đầu ) listSongDataContext = album

Trong trường hợp ta sử dụng List như trecircn thigrave nếu ta thecircm một đối tượng Song mới đối tượng

nagravey sẽ khocircng được cập nhật lecircn LongListSelector Để việc nagravey xảy ra chuacuteng ta hatildey sử dụng

ObservableCollectionltTgt thay cho List

C

1

2

3

4

5

6

7

public class Album public ObservableCollection Songs get set public Album() thisSongs = new ObservableCollection()

Chuyển đổi giaacute trị

Coacute những trường hợp bạn muốn hiển thị dữ liệu (ở Binding Target) theo một caacutech khaacutec so với

caacutech magrave bạn đang lưu trữ noacute (ở Binding Source) Viacute dụ bạn coacute điểm thi của một mocircn học nằm

trong khoảng 0 ndash 10 nhưng lại khocircng muốn hiển thị điểm số magrave hiển thị phacircn loại của noacute

(keacutem trung bigravenh khaacute giỏihellip) bạn coacute matilde một quốc gia (vn us cnhellip) nhưng lại muốn hiển thị

tecircn của quốc gia đoacutehellipcaacutech thuận tiện nhất để thực hiện việc nagravey đoacute lagrave sử dụng một đối tượng

IValueConverter

C

1

2

3

public class CountryConverterIValueConverter public object Convert(object value Type targetType object parameter

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

SystemGlobalizationCultureInfo culture) string code = (string)value switch (code) case vn return Vietnam case us return United State case cn return China case jp return Japan default return Other country public object ConvertBack(object value Type targetType object parameter SystemGlobalizationCultureInfo culture) string country = (string)value switch (country) case Vietnam return vn case United State return us case China return cn case Japan return jp default return

XAML

1

2

3

ltphonePhoneApplicationPageResourcesgt ltUtilsCountryConverter xKey=CountryConvertergt ltphonePhoneApplicationPageResourcesgt

Vagrave

1 ltTextBlock xName=txtCountry Text=Binding Code Converter=StaticResource CountryConverter gt

Khi dữ liệu được chuyển từ Binding Source đến Binding Target thigrave phương thức Convert()

được sử dụng cograven theo chiều ngược lại thigrave phương thức ConvertBack() sẽ được sử dụng

Để biết thecircm về caacutec chi tiết khi cagravei đặt Data binding trecircn Windows Phone bạn coacute thể tham

khảo thecircm caacutec viacute dụ rất cụ thể ở đacircy httpmsdnmicrosoftcomen-

uslibrarywindowsphonedevelopjj20702328v=vs10529aspx

Tigravem hiểu về Local Database trong Windows Phone

Lập Trigravenh Di Động

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng

dụng từ Web đến Windows khocircng thể thiếu database để lưu

trữ vagrave đối với Windows Phone cũng vậy Windows Phone hổ

trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở

phiecircn bản 70 đến phiecircn bản 71 trở về sau Windows Phone

hổ trợ thecircm một caacutech lưu trữ nữa magrave caacutec lập trigravenh viecircn ưa

thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ

dữ liệu trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey

đều lagrave caacutech lưu trữ phiacutea local của phone

1 Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to SQL

cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua SystemDataLinqDataContext

caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được cung cấp thocircng qua lớp Datacontext giuacutep

chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ liệu

chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2 Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao gồm lớp

kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ trong ứng dụng

Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo những

namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu ngoặc vuocircng

ldquo[]rdquo nhưng [Table][Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec

đối tượng dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn từ msdn

của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei dograveng code

magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn (ConnectionString)

ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder trong ứng dụng sau đoacute

kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem CreateDatabase() đecirc tạo cơ sở dữ liệu

4 Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể thao khảo

cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu khocircng

gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao taacutec thay

đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 3: Data binding trong windows phone 8

Giaacute trị của DataContext sẽ được kế thừa từ caacutec thagravenh phần cha đến caacutec thagravenh phần con Viacute dụ

XAML

1

2

3

ltGrid xName=gridSong gt ltTextBlock xName=txtTitle Text=Binding Title Mode=OneWay gt ltGridgt

C

1

2

3

4

5

Song song = new Song() songTitle = Like A Rose gridSongDataContext = song

Trong trường hợp nagravey chuacuteng ta đatilde gaacuten giaacute trị cho thuộc tiacutenh DataContext của Grid nhưng giaacute

trị nagravey cũng sẽ được giữ nguyecircn cho TextBlock Nếu bạn khocircng muốn sử dụng giaacute trị được kế

thừa từ Grid thigrave đơn giản chỉ cần gaacuten giaacute trị khaacutec cho thuộc tiacutenh DataContext của noacute

Chiều của liecircn kết

Coacute ba giaacute trị magrave chuacuteng ta coacute thể sử dụng cho thuộc tiacutenh Mode

1 OneTime Binding Target sẽ được cập nhật một lần duy nhất khi liecircn kết được khởi

tạo

2 OneWay Binding Target sẽ được cập nhật khi liecircn kết được khởi tạo vagrave mỗi khi giaacute trị

của Binding Source được thay đổi

3 TwoWay Sự thay đổi giaacute trị của Binding Source sẽ được cập nhật lecircn Binding Target

vagrave theo chiều ngược lại

Để việc cập nhật giaacute trị được thực hiện một caacutech tự động thigrave đối tượng Binding Source phải

triển khai interface INotifyPropertyChanged

Interface INotifyPropertyChanged coacute một event lagrave PropertyChanged event nagravey sẽ lagravem nhiệm

vụ thocircng baacuteo cho Binding Target biết để cập nhật mỗi khi coacute sự thay đổi giaacute trị ở Binding

Source Hatildey quan saacutet caacutech sử dụng INotifyPropertyChanged trong lớp Song

1

2

3

4

5

6

7

public class Song INotifyPropertyChanged private string _title public String Title get return this_title

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

set this_title = value NotifyPropertyChanged(Title) public event PropertyChangedEventHandler PropertyChanged public void NotifyPropertyChanged(string propertyName) if (PropertyChanged = null) PropertyChanged(this new PropertyChangedEventArgs(propertyName))

Mỗi khi giaacute trị của Title được thay đổi thigrave event PropertyChanged

sẽ được tung ra vagrave như vậy giaacute trị mới nagravey sẽ được cập nhật lecircn TextBlock

Trong trường hợp nagravey liecircn kết của chuacuteng ta lagrave OneWay cho necircn dữ liệu chỉ được cập nhật

theo hướng từ Binding Source đến Binding Target Nếu ta thay TextBlock bằng một TextBox

đồng thời chuyển Mode của noacute thagravenh TwoWay thigrave khi ta thay đổi giaacute trị của TextBox giaacute trị

mới nagravey sẽ được cập nhật ngay cho thuộc tiacutenh Title của đối tượng song

Liecircn kết với Collection

Thay vigrave chỉ liecircn kết với một bagravei haacutet nếu chuacuteng ta muốn hiển thị một danh saacutech bagravei haacutet thigrave coacute

thể tạo liecircn kết tới một ListltSonggt

XAML

1

2

3

4

5

6

7

ltphoneLongListSelector xName=listSong ItemsSource=Binding Songsgt ltphoneLongListSelectorItemTemplategt ltDataTemplategt ltTextBlock Text=Binding Title gt ltDataTemplategt ltphoneLongListSelectorItemTemplategt ltphoneLongListSelectorgt

C

1

2

3

4

5

6

7

8

public class Album public List Songs get set

public Album() thisSongs = new List()

vagrave

1

2

3

4

5

Album album = new Album() albumSongsAdd(new Song Title = Like A Rose ) albumSongsAdd(new Song Title = Như Chưa Từng Yecircu ) albumSongsAdd(new Song Title = Mugravea Yecircu Đầu ) listSongDataContext = album

Trong trường hợp ta sử dụng List như trecircn thigrave nếu ta thecircm một đối tượng Song mới đối tượng

nagravey sẽ khocircng được cập nhật lecircn LongListSelector Để việc nagravey xảy ra chuacuteng ta hatildey sử dụng

ObservableCollectionltTgt thay cho List

C

1

2

3

4

5

6

7

public class Album public ObservableCollection Songs get set public Album() thisSongs = new ObservableCollection()

Chuyển đổi giaacute trị

Coacute những trường hợp bạn muốn hiển thị dữ liệu (ở Binding Target) theo một caacutech khaacutec so với

caacutech magrave bạn đang lưu trữ noacute (ở Binding Source) Viacute dụ bạn coacute điểm thi của một mocircn học nằm

trong khoảng 0 ndash 10 nhưng lại khocircng muốn hiển thị điểm số magrave hiển thị phacircn loại của noacute

(keacutem trung bigravenh khaacute giỏihellip) bạn coacute matilde một quốc gia (vn us cnhellip) nhưng lại muốn hiển thị

tecircn của quốc gia đoacutehellipcaacutech thuận tiện nhất để thực hiện việc nagravey đoacute lagrave sử dụng một đối tượng

IValueConverter

C

1

2

3

public class CountryConverterIValueConverter public object Convert(object value Type targetType object parameter

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

SystemGlobalizationCultureInfo culture) string code = (string)value switch (code) case vn return Vietnam case us return United State case cn return China case jp return Japan default return Other country public object ConvertBack(object value Type targetType object parameter SystemGlobalizationCultureInfo culture) string country = (string)value switch (country) case Vietnam return vn case United State return us case China return cn case Japan return jp default return

XAML

1

2

3

ltphonePhoneApplicationPageResourcesgt ltUtilsCountryConverter xKey=CountryConvertergt ltphonePhoneApplicationPageResourcesgt

Vagrave

1 ltTextBlock xName=txtCountry Text=Binding Code Converter=StaticResource CountryConverter gt

Khi dữ liệu được chuyển từ Binding Source đến Binding Target thigrave phương thức Convert()

được sử dụng cograven theo chiều ngược lại thigrave phương thức ConvertBack() sẽ được sử dụng

Để biết thecircm về caacutec chi tiết khi cagravei đặt Data binding trecircn Windows Phone bạn coacute thể tham

khảo thecircm caacutec viacute dụ rất cụ thể ở đacircy httpmsdnmicrosoftcomen-

uslibrarywindowsphonedevelopjj20702328v=vs10529aspx

Tigravem hiểu về Local Database trong Windows Phone

Lập Trigravenh Di Động

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng

dụng từ Web đến Windows khocircng thể thiếu database để lưu

trữ vagrave đối với Windows Phone cũng vậy Windows Phone hổ

trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở

phiecircn bản 70 đến phiecircn bản 71 trở về sau Windows Phone

hổ trợ thecircm một caacutech lưu trữ nữa magrave caacutec lập trigravenh viecircn ưa

thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ

dữ liệu trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey

đều lagrave caacutech lưu trữ phiacutea local của phone

1 Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to SQL

cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua SystemDataLinqDataContext

caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được cung cấp thocircng qua lớp Datacontext giuacutep

chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ liệu

chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2 Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao gồm lớp

kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ trong ứng dụng

Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo những

namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu ngoặc vuocircng

ldquo[]rdquo nhưng [Table][Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec

đối tượng dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn từ msdn

của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei dograveng code

magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn (ConnectionString)

ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder trong ứng dụng sau đoacute

kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem CreateDatabase() đecirc tạo cơ sở dữ liệu

4 Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể thao khảo

cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu khocircng

gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao taacutec thay

đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 4: Data binding trong windows phone 8

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

set this_title = value NotifyPropertyChanged(Title) public event PropertyChangedEventHandler PropertyChanged public void NotifyPropertyChanged(string propertyName) if (PropertyChanged = null) PropertyChanged(this new PropertyChangedEventArgs(propertyName))

Mỗi khi giaacute trị của Title được thay đổi thigrave event PropertyChanged

sẽ được tung ra vagrave như vậy giaacute trị mới nagravey sẽ được cập nhật lecircn TextBlock

Trong trường hợp nagravey liecircn kết của chuacuteng ta lagrave OneWay cho necircn dữ liệu chỉ được cập nhật

theo hướng từ Binding Source đến Binding Target Nếu ta thay TextBlock bằng một TextBox

đồng thời chuyển Mode của noacute thagravenh TwoWay thigrave khi ta thay đổi giaacute trị của TextBox giaacute trị

mới nagravey sẽ được cập nhật ngay cho thuộc tiacutenh Title của đối tượng song

Liecircn kết với Collection

Thay vigrave chỉ liecircn kết với một bagravei haacutet nếu chuacuteng ta muốn hiển thị một danh saacutech bagravei haacutet thigrave coacute

thể tạo liecircn kết tới một ListltSonggt

XAML

1

2

3

4

5

6

7

ltphoneLongListSelector xName=listSong ItemsSource=Binding Songsgt ltphoneLongListSelectorItemTemplategt ltDataTemplategt ltTextBlock Text=Binding Title gt ltDataTemplategt ltphoneLongListSelectorItemTemplategt ltphoneLongListSelectorgt

C

1

2

3

4

5

6

7

8

public class Album public List Songs get set

public Album() thisSongs = new List()

vagrave

1

2

3

4

5

Album album = new Album() albumSongsAdd(new Song Title = Like A Rose ) albumSongsAdd(new Song Title = Như Chưa Từng Yecircu ) albumSongsAdd(new Song Title = Mugravea Yecircu Đầu ) listSongDataContext = album

Trong trường hợp ta sử dụng List như trecircn thigrave nếu ta thecircm một đối tượng Song mới đối tượng

nagravey sẽ khocircng được cập nhật lecircn LongListSelector Để việc nagravey xảy ra chuacuteng ta hatildey sử dụng

ObservableCollectionltTgt thay cho List

C

1

2

3

4

5

6

7

public class Album public ObservableCollection Songs get set public Album() thisSongs = new ObservableCollection()

Chuyển đổi giaacute trị

Coacute những trường hợp bạn muốn hiển thị dữ liệu (ở Binding Target) theo một caacutech khaacutec so với

caacutech magrave bạn đang lưu trữ noacute (ở Binding Source) Viacute dụ bạn coacute điểm thi của một mocircn học nằm

trong khoảng 0 ndash 10 nhưng lại khocircng muốn hiển thị điểm số magrave hiển thị phacircn loại của noacute

(keacutem trung bigravenh khaacute giỏihellip) bạn coacute matilde một quốc gia (vn us cnhellip) nhưng lại muốn hiển thị

tecircn của quốc gia đoacutehellipcaacutech thuận tiện nhất để thực hiện việc nagravey đoacute lagrave sử dụng một đối tượng

IValueConverter

C

1

2

3

public class CountryConverterIValueConverter public object Convert(object value Type targetType object parameter

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

SystemGlobalizationCultureInfo culture) string code = (string)value switch (code) case vn return Vietnam case us return United State case cn return China case jp return Japan default return Other country public object ConvertBack(object value Type targetType object parameter SystemGlobalizationCultureInfo culture) string country = (string)value switch (country) case Vietnam return vn case United State return us case China return cn case Japan return jp default return

XAML

1

2

3

ltphonePhoneApplicationPageResourcesgt ltUtilsCountryConverter xKey=CountryConvertergt ltphonePhoneApplicationPageResourcesgt

Vagrave

1 ltTextBlock xName=txtCountry Text=Binding Code Converter=StaticResource CountryConverter gt

Khi dữ liệu được chuyển từ Binding Source đến Binding Target thigrave phương thức Convert()

được sử dụng cograven theo chiều ngược lại thigrave phương thức ConvertBack() sẽ được sử dụng

Để biết thecircm về caacutec chi tiết khi cagravei đặt Data binding trecircn Windows Phone bạn coacute thể tham

khảo thecircm caacutec viacute dụ rất cụ thể ở đacircy httpmsdnmicrosoftcomen-

uslibrarywindowsphonedevelopjj20702328v=vs10529aspx

Tigravem hiểu về Local Database trong Windows Phone

Lập Trigravenh Di Động

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng

dụng từ Web đến Windows khocircng thể thiếu database để lưu

trữ vagrave đối với Windows Phone cũng vậy Windows Phone hổ

trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở

phiecircn bản 70 đến phiecircn bản 71 trở về sau Windows Phone

hổ trợ thecircm một caacutech lưu trữ nữa magrave caacutec lập trigravenh viecircn ưa

thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ

dữ liệu trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey

đều lagrave caacutech lưu trữ phiacutea local của phone

1 Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to SQL

cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua SystemDataLinqDataContext

caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được cung cấp thocircng qua lớp Datacontext giuacutep

chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ liệu

chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2 Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao gồm lớp

kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ trong ứng dụng

Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo những

namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu ngoặc vuocircng

ldquo[]rdquo nhưng [Table][Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec

đối tượng dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn từ msdn

của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei dograveng code

magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn (ConnectionString)

ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder trong ứng dụng sau đoacute

kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem CreateDatabase() đecirc tạo cơ sở dữ liệu

4 Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể thao khảo

cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu khocircng

gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao taacutec thay

đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 5: Data binding trong windows phone 8

1

2

3

4

5

6

7

8

public class Album public List Songs get set

public Album() thisSongs = new List()

vagrave

1

2

3

4

5

Album album = new Album() albumSongsAdd(new Song Title = Like A Rose ) albumSongsAdd(new Song Title = Như Chưa Từng Yecircu ) albumSongsAdd(new Song Title = Mugravea Yecircu Đầu ) listSongDataContext = album

Trong trường hợp ta sử dụng List như trecircn thigrave nếu ta thecircm một đối tượng Song mới đối tượng

nagravey sẽ khocircng được cập nhật lecircn LongListSelector Để việc nagravey xảy ra chuacuteng ta hatildey sử dụng

ObservableCollectionltTgt thay cho List

C

1

2

3

4

5

6

7

public class Album public ObservableCollection Songs get set public Album() thisSongs = new ObservableCollection()

Chuyển đổi giaacute trị

Coacute những trường hợp bạn muốn hiển thị dữ liệu (ở Binding Target) theo một caacutech khaacutec so với

caacutech magrave bạn đang lưu trữ noacute (ở Binding Source) Viacute dụ bạn coacute điểm thi của một mocircn học nằm

trong khoảng 0 ndash 10 nhưng lại khocircng muốn hiển thị điểm số magrave hiển thị phacircn loại của noacute

(keacutem trung bigravenh khaacute giỏihellip) bạn coacute matilde một quốc gia (vn us cnhellip) nhưng lại muốn hiển thị

tecircn của quốc gia đoacutehellipcaacutech thuận tiện nhất để thực hiện việc nagravey đoacute lagrave sử dụng một đối tượng

IValueConverter

C

1

2

3

public class CountryConverterIValueConverter public object Convert(object value Type targetType object parameter

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

SystemGlobalizationCultureInfo culture) string code = (string)value switch (code) case vn return Vietnam case us return United State case cn return China case jp return Japan default return Other country public object ConvertBack(object value Type targetType object parameter SystemGlobalizationCultureInfo culture) string country = (string)value switch (country) case Vietnam return vn case United State return us case China return cn case Japan return jp default return

XAML

1

2

3

ltphonePhoneApplicationPageResourcesgt ltUtilsCountryConverter xKey=CountryConvertergt ltphonePhoneApplicationPageResourcesgt

Vagrave

1 ltTextBlock xName=txtCountry Text=Binding Code Converter=StaticResource CountryConverter gt

Khi dữ liệu được chuyển từ Binding Source đến Binding Target thigrave phương thức Convert()

được sử dụng cograven theo chiều ngược lại thigrave phương thức ConvertBack() sẽ được sử dụng

Để biết thecircm về caacutec chi tiết khi cagravei đặt Data binding trecircn Windows Phone bạn coacute thể tham

khảo thecircm caacutec viacute dụ rất cụ thể ở đacircy httpmsdnmicrosoftcomen-

uslibrarywindowsphonedevelopjj20702328v=vs10529aspx

Tigravem hiểu về Local Database trong Windows Phone

Lập Trigravenh Di Động

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng

dụng từ Web đến Windows khocircng thể thiếu database để lưu

trữ vagrave đối với Windows Phone cũng vậy Windows Phone hổ

trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở

phiecircn bản 70 đến phiecircn bản 71 trở về sau Windows Phone

hổ trợ thecircm một caacutech lưu trữ nữa magrave caacutec lập trigravenh viecircn ưa

thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ

dữ liệu trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey

đều lagrave caacutech lưu trữ phiacutea local của phone

1 Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to SQL

cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua SystemDataLinqDataContext

caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được cung cấp thocircng qua lớp Datacontext giuacutep

chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ liệu

chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2 Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao gồm lớp

kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ trong ứng dụng

Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo những

namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu ngoặc vuocircng

ldquo[]rdquo nhưng [Table][Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec

đối tượng dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn từ msdn

của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei dograveng code

magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn (ConnectionString)

ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder trong ứng dụng sau đoacute

kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem CreateDatabase() đecirc tạo cơ sở dữ liệu

4 Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể thao khảo

cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu khocircng

gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao taacutec thay

đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 6: Data binding trong windows phone 8

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

SystemGlobalizationCultureInfo culture) string code = (string)value switch (code) case vn return Vietnam case us return United State case cn return China case jp return Japan default return Other country public object ConvertBack(object value Type targetType object parameter SystemGlobalizationCultureInfo culture) string country = (string)value switch (country) case Vietnam return vn case United State return us case China return cn case Japan return jp default return

XAML

1

2

3

ltphonePhoneApplicationPageResourcesgt ltUtilsCountryConverter xKey=CountryConvertergt ltphonePhoneApplicationPageResourcesgt

Vagrave

1 ltTextBlock xName=txtCountry Text=Binding Code Converter=StaticResource CountryConverter gt

Khi dữ liệu được chuyển từ Binding Source đến Binding Target thigrave phương thức Convert()

được sử dụng cograven theo chiều ngược lại thigrave phương thức ConvertBack() sẽ được sử dụng

Để biết thecircm về caacutec chi tiết khi cagravei đặt Data binding trecircn Windows Phone bạn coacute thể tham

khảo thecircm caacutec viacute dụ rất cụ thể ở đacircy httpmsdnmicrosoftcomen-

uslibrarywindowsphonedevelopjj20702328v=vs10529aspx

Tigravem hiểu về Local Database trong Windows Phone

Lập Trigravenh Di Động

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng

dụng từ Web đến Windows khocircng thể thiếu database để lưu

trữ vagrave đối với Windows Phone cũng vậy Windows Phone hổ

trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở

phiecircn bản 70 đến phiecircn bản 71 trở về sau Windows Phone

hổ trợ thecircm một caacutech lưu trữ nữa magrave caacutec lập trigravenh viecircn ưa

thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ

dữ liệu trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey

đều lagrave caacutech lưu trữ phiacutea local của phone

1 Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to SQL

cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua SystemDataLinqDataContext

caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được cung cấp thocircng qua lớp Datacontext giuacutep

chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ liệu

chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2 Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao gồm lớp

kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ trong ứng dụng

Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo những

namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu ngoặc vuocircng

ldquo[]rdquo nhưng [Table][Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec

đối tượng dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn từ msdn

của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei dograveng code

magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn (ConnectionString)

ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder trong ứng dụng sau đoacute

kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem CreateDatabase() đecirc tạo cơ sở dữ liệu

4 Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể thao khảo

cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu khocircng

gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao taacutec thay

đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 7: Data binding trong windows phone 8

Tigravem hiểu về Local Database trong Windows Phone

Lập Trigravenh Di Động

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng

dụng từ Web đến Windows khocircng thể thiếu database để lưu

trữ vagrave đối với Windows Phone cũng vậy Windows Phone hổ

trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở

phiecircn bản 70 đến phiecircn bản 71 trở về sau Windows Phone

hổ trợ thecircm một caacutech lưu trữ nữa magrave caacutec lập trigravenh viecircn ưa

thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ

dữ liệu trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey

đều lagrave caacutech lưu trữ phiacutea local của phone

1 Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to SQL

cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua SystemDataLinqDataContext

caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được cung cấp thocircng qua lớp Datacontext giuacutep

chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ liệu

chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2 Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao gồm lớp

kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ trong ứng dụng

Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo những

namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu ngoặc vuocircng

ldquo[]rdquo nhưng [Table][Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec

đối tượng dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn từ msdn

của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei dograveng code

magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn (ConnectionString)

ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder trong ứng dụng sau đoacute

kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem CreateDatabase() đecirc tạo cơ sở dữ liệu

4 Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể thao khảo

cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu khocircng

gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao taacutec thay

đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 8: Data binding trong windows phone 8

Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo những

namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu ngoặc vuocircng

ldquo[]rdquo nhưng [Table][Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec

đối tượng dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn từ msdn

của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei dograveng code

magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn (ConnectionString)

ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder trong ứng dụng sau đoacute

kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem CreateDatabase() đecirc tạo cơ sở dữ liệu

4 Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể thao khảo

cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu khocircng

gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao taacutec thay

đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 9: Data binding trong windows phone 8

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu ngoặc vuocircng

ldquo[]rdquo nhưng [Table][Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec

đối tượng dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn từ msdn

của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei dograveng code

magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn (ConnectionString)

ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder trong ứng dụng sau đoacute

kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem CreateDatabase() đecirc tạo cơ sở dữ liệu

4 Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể thao khảo

cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu khocircng

gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao taacutec thay

đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 10: Data binding trong windows phone 8

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn (ConnectionString)

ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder trong ứng dụng sau đoacute

kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem CreateDatabase() đecirc tạo cơ sở dữ liệu

4 Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể thao khảo

cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu khocircng

gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao taacutec thay

đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 11: Data binding trong windows phone 8

gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao taacutec thay

đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 12: Data binding trong windows phone 8

Tigravem hiểu về MVVM trong Windows Phone

Lập Trigravenh Di

Động

- MVVM lagrave từ viết tắt

của Model-View-

ViewModel Desgin

parttern Lagrave mocirc higravenh sử

dụng khaacute phổ biến hiện

nay từ những ứng dụng

Windows Phone cho

đến những ứng dụng

web Windows 8 -

MVVM giuacutep cho việc

cập nhật binding dữ

liệu được xuyecircn suốt

trong quaacute trigravenh tương

taacutec chuacuteng ta coacute thể hiểu

đơn giản lagrave với kiến

truacutec nagravey chuacuteng ta chỉ

việc tương taacutec với dữ

liệu thigrave phiacutea giao diện

sẽ tự động thay đổi

theo - Với kiến truacutec

nagravey sẽ taacutech biệt giữa

kiến truacutec dữ liệu quaacute

trigravenh xử lyacute vagrave giao diện

ứng dụng

1 Model

Chứa kiến truacutec dữ liệu của ứng dụng trong Model chuacuteng ta sẽ đinh nghĩa những lớp cấu tạo

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 13: Data binding trong windows phone 8

necircn ứng dụng những cấu truacutec dữ liệu cần thiết

2 ViewModel Chứa dữ liệu để đổ ra ngoagravei giao diện viacute dụ như ldquomột danh saacutech sinh viecircnrdquo

chẳng hạn Ngoagravei ra caacutec thao taacutec trecircn dữ liệu như thecircm sửa xoacutea cập nhật hellip cũng được xử lyacute

trong ViewModel

3 View Giao diện ứng dụng

Advanced

Chuacuteng ta đatilde tigravem hiểu sơ về những khaacutei niệm cơ bản trong MVVM bacircy giờ chuacuteng ta hatildey cugraveng

nhau lagravem một viacute dụ nhỏ để thấy được caacutei hay của MVVM

Trước tiecircn chuacuteng ta tạo mới Project Windows Phone tiếp theo lagrave tạo 2 Folder lagrave Model vagrave

ViewModel để chứa caacutec lớp của ứng dụng

Sau khi đatilde chuẩn bị caacutec Folder theo đuacuteng kiến truacutec bacircy giờ chuacuteng ta bắt đầu đinh nghĩa cấu

truacutec của lớp Student gồm Id vagrave Name

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 14: Data binding trong windows phone 8

6 using SystemComponentModel

7 namespace MVVMSampleModels

8

9 public class Student INotifyPropertyChanged

10

11

12 private string _name

13

14 public string Name

15

16 get return _name

17 set

18

19 if (value = _name)

20

21 _name = value

22 NotifyChanged(Name)

23

24

25

26

27 private string _id

28

29 public string Id

30

31 get return _id

32 set

33

34 _id = value

35 NotifyChanged(Id)

36

37

38

39

40 public event PropertyChangedEventHandler PropertyChanged

41

42 public void NotifyChanged(string propertyName)

43

44 if (PropertyChanged = null)

45

46 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

47

48

49

50

Chuacute yacute

Trong Windows Phone để dữ liệu được cập nhật ngoagravei giao diện một caacutech xuyecircn suốt chuacuteng ta

phải cho Model kế từ từ Interface INotifyPropertyChanged thuộc namespace

SystemComponentModel vagrave phải Implement Interface nagravey

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 15: Data binding trong windows phone 8

Phương thức NotifyChanged lagrave một phương thức khocircng thể thiếu vigrave phương thức nagravey chịu

traacutech nhiệu thocircng baacuteo về sự thay đổi của dữ liệu ra phiacutea giao diện Vagrave điều nagravey giuacutep dữ liệu

cập nhật một caacutech xuyecircn suốt

Vậy lagrave phiacutea Model chuacuteng ta đatilde xacircy dựng xong bacircy giờ đến ViewModel Trong ViewModel

chuacuteng ta sẽ định nghĩa một lớp MainViewModel Lớp nagravey chứa thocircng tin dữ liệu magrave chuacuteng ta

Binding ra ngoagravei phiacutea giao diện ngoagravei ra migravenh định nghĩa thecircm những phương thức để xử lyacute

việc tương taacutec dữ liệu cụ thể migravenh sẽ lagravem 1 phương thức AddStudent để thecircm dữ liệu

Ngoagravei ra migravenh chuẩn bị thecircm phương thức LoadData để tạo dữ liệu mẫu

1 using System

2 using SystemCollectionsGeneric

3 using SystemLinq

4 using SystemText

5

6 using SystemComponentModel

7 using SystemCollectionsObjectModel

8 using MVVMSampleModels

9 namespace MVVMSampleViewModels

10

11 public class MainViewModel INotifyPropertyChanged

12

13

14 public ObservableCollectionltStudentgt ListStudents get set

15

16 private bool _isDataLoaded

17

18 public bool IsDataLoaded

19

20 get return _isDataLoaded

21 set

22

23 if (_isDataLoaded = value)

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 16: Data binding trong windows phone 8

24

25 _isDataLoaded = value

26 NotifyChanged(IsDataLoaded)

27

28

29

30

31 public void AddStudent(Student student)

32

33 thisListStudentsAdd(student)

34

35

36 public MainViewModel()

37

38 ListStudents = new ObservableCollectionltStudentgt()

39

40 LoadData()

41

42

43 public void LoadData()

44

45 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Phạm Phương Nguyecircn )

46 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Chung Vĩnh Khang )

47 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Duy Phượng )

48 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thiecircn Ca )

49 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Trần Chiacute Khang )

50 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Lyacute Trong Khoa )

51 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Vũ Quang Huy )

52 thisListStudentsAdd(new Student() Id = GuidNewGuid()ToString()

Name = Nguyễn Thagravenh Đạt )

53

54

55 public event PropertyChangedEventHandler PropertyChanged

56

57 public void NotifyChanged(string propertyName)

58

59 if (PropertyChanged = null)

60

61 PropertyChanged(this new PropertyChangedEventArgs(propertyName))

62

63

64

65

Lưu yacute Cấu truacutec dữ liệu để chứa tập dữ liệu lagrave ObservableCollection trong namespace

SystemCollectionsObjectModel cấu truacutec dữ liệu nagravey chịu traacutech nhiệm cập nhật dữ liệu ra

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 17: Data binding trong windows phone 8

phiacutea giao diện khi chuacuteng ta tương taacutec ldquothecircm xoacutea sửardquo một phần tử nagraveo đoacute trong tập dữ

liệu Caacutec bạn khocircng necircn dugraveng List hay IList trong caacutec trường hợp thecircm sửa xoacutea dữ liệu magrave

muốn noacute tự cập nhật ngoagravei giao diện vigrave bản thacircn List IList khocircng hổ trợ vấn đề nagravey magrave bắt

buộc phải dugraveng ObservableCollection

Bước xacircy dựng ViewModels vagrave Models đatilde xong bacircy giờ chỉ cograven xử lyacute ở phiacutea giao diện (view)

ứng dụng trước khi xacircy đựng giao diện ứng dụng chuacuteng ta vagraveo Appxamlcs khai baacuteo 1 biến

static MainViewModel để dugraveng trong suốt quaacute trigravenh vận hagravenh ứng dụng đứng quecircn khởi tạo

biến nagravey trong contructor nheacute

public static MainViewModel ViewModel get set

Tiếp theo lagrave chuacuteng ta Xacircy dựng giao diện ứng dụng gồm 1 textbox để nhập tecircn sinh viecircn 1

button để thecircm vagraveo danh saacutech sinh viecircn một Listbox để trigravenh diễn dữ liệu Vagrave nhớ định nghĩa

ItemTemplate cho ListBox nheacute để việt Binding những filed đuacuteng như yacute migravenh ngoagravei ra ở thuộc

tiacutenh ItemSource chuacuteng ta cần chỉ định đuacuteng nguồn dữ liệu

Xaml code

1 ltphonePhoneApplicationPage

2 xClass=MVVMSampleMainPage

3 xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation

4 xmlnsx=httpschemasmicrosoftcomwinfx2006xaml

5 xmlnsphone=clr-namespaceMicrosoftPhoneControlsassembly=MicrosoftPhone

6 xmlnsshell=clr-namespaceMicrosoftPhoneShellassembly=MicrosoftPhone

7 xmlnsd=httpschemasmicrosoftcomexpressionblend2008

8 xmlnsmc=httpschemasopenxmlformatsorgmarkup-compatibility2006

9 mcIgnorable=d dDesignWidth=480 dDesignHeight=768

10 FontFamily=StaticResource PhoneFontFamilyNormal

11 FontSize=StaticResource PhoneFontSizeNormal

12 Foreground=StaticResource PhoneForegroundBrush

13 SupportedOrientations=Portrait Orientation=Portrait

14 shellSystemTrayIsVisible=Truegt

15 ltphonePhoneApplicationPageResourcesgt

16 ltDataTemplate xKey=studentItemStylegt

17 ltGrid dDataContext=dDesignData SampleDataStudentSampleDataxaml

Instance=xNull Height=71 Width=480gt

18 ltTextBlock Text=Binding Name Margin=101000

HorizontalAlignment=Left VerticalAlignment=Top

FontSize=32 Width=460gt

19 ltGridgt

20 ltDataTemplategt

21 ltphonePhoneApplicationPageResourcesgt

22

23 lt--LayoutRoot is the root grid where all page content is placed--gt

24 ltGrid xName=LayoutRoot Background=Transparentgt

25 ltGridRowDefinitionsgt

26 ltRowDefinition Height=Autogt

27 ltRowDefinition Height=gt

28 ltGridRowDefinitionsgt

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 18: Data binding trong windows phone 8

29

30 lt--TitlePanel contains the name of the application and page title--gt

31 ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt

32 ltTextBlock xName=ApplicationTitle Text=MVVM

Style=StaticResource PhoneTextNormalStylegt

33 ltTextBlock xName=PageTitle Text=MVVM Sample Margin=9-700

Style=StaticResource PhoneTextTitle1Stylegt

34 ltStackPanelgt

35

36 lt--ContentPanel - place additional content here--gt

37 ltGrid xName=ContentPanel GridRow=1 Margin=120120gt

38 ltGridRowDefinitionsgt

39 ltRowDefinition Height=auto gt

40 ltRowDefinition Height=autogt

41 ltRowDefinition Height=autogt

42 ltRowDefinition Height=autogt

43 ltRowDefinition Height=gt

44 ltGridRowDefinitionsgt

45 ltTextBlock GridRow=0 Text=Name Margin=14000 gt

46 ltTextBox xName=txtStudentName GridRow=1gt

47 ltButton GridRow=2 xName=btnSave

Width=150 Content=Save HorizontalAlignment=Right gt

48 ltListBox GridRow=3 xName=lstStudents

ItemsSource=Binding ListStudents

ItemTemplate=StaticResource studentItemStyle

Margin=00010 GridRowSpan=2gtltGridgt

49 ltGridgt

50

51 ltphonePhoneApplicationPagegt

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 19: Data binding trong windows phone 8

Bacircy giờ chuacuteng ta thực hiện xử lyacute trong MainPagexamlcs để khi thecircm tecircn sinh viecircn vagraveo

textbox vagrave chọn save thigrave tecircn đoacute sẽ cập nhật ngay vagraveo listbox magrave chuacuteng ta khocircng cần lagravem thecircm

thao taacutec nagraveo nữa

1 using MVVMSampleModels

2

3 namespace MVVMSample

4

5 public partial class MainPage PhoneApplicationPage

6

7 Constructor

8 public MainPage()

9

10 InitializeComponent()

11 thisDataContext = AppViewModel

12 thisLoaded += MainPage_Loaded

13 thisbtnSaveClick += btnSave_Click

14

15

16 void btnSave_Click(object sender RoutedEventArgs e)

17

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 20: Data binding trong windows phone 8

18 AppViewModelAddStudent(new Student() Id = GuidNewGuid()ToString()

Name = txtStudentNameText )

19

20

21 void MainPage_Loaded(object sender RoutedEventArgs e)

22

23 if (AppViewModelIsDataLoaded)

24 AppViewModelLoadData()

25

26

27

Vagrave bacircy giờ chạy ứng dụng vagrave xem kết quả nagraveo

Khi gotilde tecircn vagraveo textbox vagrave nhấn nuacutet Save magrave thấy lagrave kết quả hiện liền phiacutea dưới Listbox lagrave caacutec

bạn đatilde thagravenh cocircng với MVVM rồi nheacute

Hy vọng bagravei viết sẽ mang thocircng tin hữ iacutech đến với caacutec bạn

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 21: Data binding trong windows phone 8

Local Database for Windows Phone

IIntroduction

Database coacute thể được xem lagrave core của mọi ứng dụng một ứng dụng từ Web đến

Windows khocircng thể thiếu database để lưu trữ vagrave đối với Windows Phone cũng vậy

Windows Phone hổ trợ lưu trữ dữ liệu bằng nhiều caacutech như lagrave XML Binary ở phiecircn bản

70 đến phiecircn bản 71 trở về sau Windows Phone hổ trợ thecircm một caacutech lưu trữ nữa magrave

caacutec lập trigravenh viecircn ưa thiacutech đoacute lagrave SQL CE (SQL Compact Editon) giuacutep việc lưu trữ dữ liệu

trở necircn dể dagraveng hơn Tất cả những caacutech lưu trữ nagravey đều lagrave caacutech lưu trữ phiacutea local của

phone

Trong bagravei nagravey migravenh xin chia sẻ về Local Database trong Windows Phone

IIFundamental

1Tổng quan về kiến truacutec

Để lưu trữ dữ liệu phiacutea local một Windows Phone app cần dugraveng LINQ to SQL LINQ to

SQL cung cấp một giải phaacutep lập trigravenh hướng đối tượng tương taacutec trực tiếp lecircn thực thể

dữ liệu

Caacutec thao caacutec trecircn LINQ to SQL được cung cấp thocircng qua

SystemDataLinqDataContext caacutec thao taacutec thecircm sửa xoacutea cập nhật dữ liệu được

cung cấp thocircng qua lớp Datacontext giuacutep chuacuteng ta sử dụng rất dể dagraveng

Lớp Datacontext trong ứng dụng Windows Phone coacute thể hiểu lagrave lớp chưa kiến truacutec dữ

liệu chứa những đối tượng Table của SQL

LINQ to SQL runtime lagrave cầu nối giữa thế giới đối tượng thự thể vagrave thế giới dữ liệu

2Xacircy dựng kiến truacutec dữ liệu cho ứng dụng Windows Phone

Để tạo Local Database việc đầu tiecircn bạn phải lagravem lagrave định nghĩa kiến truacutec dữ liệu bao

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 22: Data binding trong windows phone 8

gồm lớp kế thừa lớp Datacontext lớp nagravey sẽ chứa tập những đối tượng coacute quan hệ

trong ứng dụng Ngoagravei ra phải định nghĩa từng thực thể đổi tượng bảng (Table) để

việc Datacontext mapping

Chuacuteng ta sẽ hiểu rotilde hơn thocircng qua viacute vụ sau

Một điều khocircng thể thiếu lagrave để sử dụng lớp Datacontext trecircn chuacuteng ta phải khai baacuteo

những namespace sau

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 23: Data binding trong windows phone 8

Chuacuteng ta để yacute ở code sample phiacutea trecircn coacute thuộc tiacutenh coacute caacutec thuộc tiacutenh trong dấu

ngoặc vuocircng ldquo[]rdquo nhưng

[Coloumn] đoacute lagrave những thuộc tiacutenh mapping Nhờ caacutec thuộc tiacutenh nagravey lagrave caacutec đối tượng

dữ liệu sẽ mapping tới đuacuteng table trong local database Tham khảo đầy đủ thocircng tin

tại đacircy

SystemDataLinqMapping

Sau đacircy lagrave những thuộc tiacutenh cơ bản magrave chuacuteng ta cần phải biết migravenh sẽ để nguyecircn văn

từ msdn của Microsoft

3 Tạo Local Database

Sau khi tạo Datacontext chuacuteng ta sẽ rất dể dagraveng tạo local database chỉ bằng một vagravei

dograveng code magrave lớp Datacontext hổ trợ

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 24: Data binding trong windows phone 8

Hagravem khởi tạo của Datacontext cần một tham số đầu vagraveo lagrave đường dẩn

(ConnectionString) ldquoisostroreDatabaseNamesdfrdquo đường dẩn nagravey dẩn tới local folder

trong ứng dụng sau đoacute kiểm tra nếu Database chưa tồn tại thigrave gọi hagravem

CreateDatabase() đecirc tạo cơ sở dữ liệu

4Sử dụng Local Database

Để sử dụng local Database chuacuteng ta phải sử dụng lệnh LINQ to SQL caacutec bạn coacute thể

thao khảo cụ thể ở đacircy

Tigravem hiểu về LINQ phần 1

Tigravem hiểu về LINQ phần 2

Sau đacircy lagrave một số viacute dụ đơn giản về caacutech sử dụng local database

SELECTING DATA

INSERTING DATA

Lưu yacute lagrave caacutec thao taacutec thecircm sửa xoacutea sẽ khocircng được thực hiện dưới local database nếu

khocircng gọi hagravem SubmitChanges()

UPDATING DATA

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading

Page 25: Data binding trong windows phone 8

Trong LINQ dữ liệu khi chuacuteng ta query lecircn noacute sẽ tồn tại trong bộ nhớ khi đoacute mọi thao

taacutec thay đổi dữ liệu chuacuteng ta chỉ cần gọi hagravem SubmitChanges() vậy lagrave dữ liệu sẽ tự

động cập nhật

DELETING DATA

Với cuacute phaacutep LINQ khaacute đơn giản chuacuteng ta sẽ rất dể dagraveng lagravem việc với Database

Hy vọng bagravei viết nagravey sẽ hữu iacutech với caacutec bạn

Thanks for reading