Upload
tony-nguyen
View
284
Download
9
Embed Size (px)
Citation preview
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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