Skip to main content

Data Binding with INotifyPropertyChanged

Làm sao để cập nhật trạng thái, dữ liệu trên giao diện phần mềm nếu phần mềm của bạn chạy đa luồng (Multithreading). Cách đơn giản nhất là dùng Data binding, mà ví dụ của tôi ở đây là sử dụng lớp INotifyPropertyChanged.
Namespace: System.ComponentModel;
Lớp interface này có duy nhất 1 thành viên là
public event PropertyChangedEventHandler PropertyChanged;
Để thực thi interface này, bạn cần implement phương thức PropertyChanged.



namespace INotificationAndWaitOne
{
    public class Settings : INotifyPropertyChanged
    {        
        public event PropertyChangedEventHandler PropertyChanged;

        public Settings() { }

        private string _status="alo";
        public string Status
        {
            get { return _status; }
            set 
            {
                _status = value;
                OnPropertyChanged("Status");
            }
        }

        protected void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}
Ở đây bạn chú ý mình dùng namespace INotificationAndWaitOne. Để binding dữ liệu lên giao diện, bạn cần khai báo namespace chứa class Settings
<Window x:Class="INotificationAndWaitOne.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:logic="clr-namespace:INotificationAndWaitOne" Title="Multithread" Height="350" Width="525">
<Label Content="{Binding Source={x:Static logic:AppSettings.Settings}, Path=Status, Mode=OneWay}" Height="28" HorizontalAlignment="Left" Margin="126,37,0,0" Name="lblStatus" VerticalAlignment="Top" Width="231" />
Dòng cần khai báo: xmlns:logic="clr-namespace:INotificationAndWaitOne". Để cập nhật trạng thái lên giao diện, bạn chỉ đơn giản việc gọi class Settings và gán giá trị cho property cần binding.
AppSettings.Settings.Status = enumStatus.Success.ToString(); 
Lưu ý: Bạn chỉ thực hiện binding data chỉ với properties
Ví dụ: Link MediaFire

Comments

Popular posts from this blog

Lập trình đa luồng với Task

Bài viết được đăng trên Jou Lập trình
Trong phiên bản .NET framework 4.0, Microsoft đã bổ sung nhiều thư viện hỗ trợ việc xử lý đa luồng (multi-threading), nhằm đơn giản hóa việc lập trình lẫn hiệu suất của chương trình. Trong bài viết này, tôi xin hướng dẫn các bạn sử dụng lớp System.Threading.Task.

Tìm hiểu về IdentityServer 4

Trong bài viết này, mình sẽ hướng dẫn các bạn làm quen với thư viện Identity Server 4, và tích hợp các service In-Memory của Identity Server 4 vào Project Web API trong .NET Core.

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize
Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh.
Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.