使用 XAML 的 UI 開發技術運用到 DataBinding 時要記得的處理...

使用其 Data Binding (資料繫結)時至少要掌握的三個關鍵處理:

  1. 其 Data Context 的屬性掌握。
  2. UI Element 的屬性所繫結到的 Data 兩者之間的 Notification 設計。
  3. 所繫結到的 Data  若是集合體,請把該集合體的型別設計為 ObservableCollection<T>

其一:

  1. Windows Presentation Foundation (WPF) 技術的 Data Context 屬性: DataContext
  2. Xamarin.Froms/.NET MAUI 技術的 Data Context 屬性: BindingContext (Xamarin.Forms/.NET MAUI)。
  3. Windows App SDK with UWP/WinUI3 中使用 "{Binding}" 時,在 FrameworkElement 中的 Data Context 屬性: DataContext
    (另有 {x:bind} 來進行資料繫結的撰寫方式,以利在此開發技術中取得更好的繫結效能跟偵錯問題處理,詳見此連結介紹)

其二:

資料類別設計,除了要記得去實作 INotifyPropertyChanged 的介面外,也請記得在每個屬性的 set 區塊去呼叫變化的通知功能。

        private string _phoneNumber;
        public string PhoneNumber  
        {  
            get  
            {  
                return _phoneNumberValue;  
            }  

            set  
            {  
            	if (value != _phoneNumberValue)  
                {  
                	_phoneNumberValue = value;
                } 
            }  
        } 

請記得寫成

        private string _phoneNumber
        public string PhoneNumber  
        {  
            get  
            {  
                return _phoneNumberValue;  
            }  

            set  
            {  
                if (value != _phoneNumberValue)  
                {  
                    _phoneNumberValue = value;  
                    NotifyPropertyChanged();  
                }  
            }  
        } 

最怕的就是所設計的類別當中,有的屬性有設計、有的屬性沒有設計,然後 UI 又去繫結到沒有設計的屬性,就…

當然,可以的話就使用 "CommunityToolkit.Mvvm" 來撰寫該類別的設計。可到 https://learn.microsoft.com/en-us/dotnet/communitytoolkit/mvvm/ 參考使用的方式,在能妥善運用 CommuntiyToolkit.Mvvm 後就不用每次都要自己重頭實作了。

其三:

如果所設計的類別當中有要記錄多個資料,而設計了集合或陣列來紀錄資料時,請直接使用 ObservableCollection 設計。

不然在透由 Binding 繫結該資料物件的集合或陣列屬性後,UI 是不會接收到集合或陣列的內部資料有產生變化時的通知。

妙的是…

曾經看到為了讓 UI 收到資料的變化通知,還會在 C# 程式當中把 DataContext 重新設定一次的寫法,如下:

DataContext = null;
DataContext = 原本的物件;

對了,上述做法也能解決其二的困擾,但這是不正確的作法,請不要學。


 


I'm a Microsoft MVP - Developer Technologies (From 2015 ~).
 

MVP_Logo



I focus on the following topics: Xamarin Technology, Azure, Mobile DevOps, and Microsoft EM+S.

If you want to know more about them, welcome to my website:
https://jamestsai.tw 


本部落格文章之圖片相關後製處理皆透過 Techsmith 公司 所贊助其授權使用之 "Snagit" 與 "Snagit Editor" 軟體製作。