Trong 2 phần trước, ta đã có một demo cơ bản về cách sử dụng mô hình MVVM, sử dụng Entity Framework (Code First, EF này là EF core 7 nên một vài lệnh hơi khác một tí, nhưng nếu bạn quay lại đọc EF 6 thì vẫn không có gì trở ngại). Hôm nay, tiếp nối một phần rất quan trọng đó là Validation. Validation ở đây là muốn dữ liệu input, output không bị lỗi sai kiểu dữ liệu, mọi thứ nằm trong tầm kiểm soát giới hạn, nói chung là phải đúng như thiết kế ban đầu.
- Phần I - WPF sử mô hình MVVM
- Phần II - Kết nối database với (ORM) Entity Framework
- Phần III - Validation Input/Output
- Phần IV- Undo/Redo Action
- Phần V - Authentication và Authorization
- Phần VI - DI/IoC
- Phần VII - Testing
Trước khi vào ví dụ validate dữ liệu, ta cần biết một vài điều sau
Binding
Giúp lấy dữ liệu từ code-behind lên view XAML và ngược lại. Không nói đến việc gán dữ liệu kiểu truyền thống như Winforms bằng cách lấy Name của TextBox rồi gán Text cho nó trong code-behind, ở đây ta đang làm theo MVVM. Tất nhiên không ai cấm bạn đưa toàn bộ code từ ViewModel lên Code-Behind của file XAML, điều đó chẳng ảnh hưởng gì, chỉ việc Set DataContext = this, và ta có thể Binding như cũ. OK Nhưng sinh ra mô hình MVVM để đáp ứng nhiều nhu cầu, một trong số đó là tesing nên move hết code-behind về ViewModel. Một nhu cầu để sử dụng MVVM nữa là việc tách Code-Behind ra khỏi View là cho phép Designer thiết kế giao diện thoải mái trên Blend trong khi đó Coder vẫn đang miệt mải code logic và tesing, không ai phải chờ đợi ai cả!
(Đừng quên là bạn có thể Binding hầu như mọi Properties của Control nhé, chẳng hạn như Text, Color, Icon, Size, Event...)
Mode
Cho phép kiểu Binding
- OneWay: Chỉ chuyển dữ liệu từ ViewModel lên View
- TwoWay: Vừa nhận dữ liệu lên View từ ViewModel như OneWay, vừa đưa dữ liệu xuống ViewModel từ View
- OneTime: Giống OneWay nhưng nó chỉ làm 1 lần khi khởi tạo hoặc DataContext thay đổi lần đầu.
- OneWayToSource: Ngược lại OneWay, chỉ lấy dữ liệu từ View xuống ViewModel
- Default: Cái này phụ thuộc vào control
- Không khai báo Mode thì mặc định là OneWay
UpdateSourceTrigger
Thiết lập thời gian lúc nào thì được binding khi thay đổi dữ liệu. Nó chỉ làm việc khi mode là TwoWay hoặc OneWayToSource ngược lại sẽ không có tác dụng. Vì mục đích là kiểm soát input
- Default: Mặc định hầu hết các thuộc tính là PropertyChanged chỉ có thuộc tính Text là LostFocus.
- Explicit: Chỉ binding khi bạn gọi phương thức UpdateSource.
- LostFocus: Binding ngay khi Lostfocus khỏi control
- PropertyChanged: Binding ngay khi thuộc tính thay đổi. Ví dụ bạn set điều này cho thuộc tính Text thì mỗi khi gõ 1 ký tự, binding lập tức thực thi. Như vậy khá tốn hiệu năng, trừ trường hợp yêu cầu đặc biệt trong nghiệp vụ.
Converter
Cho phép bạn triển khai 2 phương thức, một là convert giá trị từ dưới ViewModel lên, thứ hai là convert giá trị từ View xuống ViewModel. Làm như vậy để mần chi?!
Ví dụ:
Giờ tôi muốn TextBox hiển trị giới tính Nam/Nữ tương ứng True/False. Thì bây giờ ta tạo một property kiểu bool dưới ViewModel sau đó binding cho Text property của TextBox.
Created: 28/10/2016
[WPF] Create Simple WPF App With MVVM and Validation - Part III
Related Tags :EF 7 Entity Framework Core MVVM Validation WPF
No comments:
Post a Comment
Commets Download Photoshop Actions, Lightroom Presets, PSD Template, Mockups, Stocks, Vectors, Fonts. Download free