前言:WPF資料繫結對於WPF應用程式來說尤為重要,本文將講述使用MVVM模式進行資料繫結的四步走用法:
具體例項程式碼如下:
以下程式碼僅供參考,如有問題請在評論區留言,謝謝
1 第一步:宣告一個類用來實現介面 INotifyPropertyChanged,並在介面的後臺程式碼中例項化vm物件 2 3 public class NotifyPropertyObject : INotifyPropertyChanged 4 { 5 public event PropertyChangedEventHandler PropertyChanged; 7 public void RaisePropertyChanged(string propertyName) 8 { 9 if (PropertyChanged != null) 10 { 11 PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); 12 } 13 } 14 } 15 16 private MainWindowVM vm = new MainWindowVM(); //重點 17 public MainWindow() 18 { 19 InitializeComponent(); 20 this.DataContext = vm;//重點 21 } 22 23 第二步:為每一個介面建立其模型類,如MainWindowVM,AzimuthWindowVM........,此種型別的類同樣需繼承自類NotifyPropertyObject 24 注意:(1)此類中主要新增後臺的實現程式碼,其一是使後臺程式碼儘可能簡單;其二是便於資料的繫結 25 (2)此類中大多數情況下寫的是屬性和方法 26 示例: 27 28 public class MainWindowVM : NotifyPropertyObject 29 { 30 private double _dmsL0; //中央子午線經度 31 public double dmsL0 32 { 33 get { return _dmsL0; } 34 set 35 { 36 _dmsL0 = value; 37 RaisePropertyChanged("dmsL0"); 38 } 39 } 40 } 41 42 public class AzimuthWindowVM : NotifyPropertyObject 43 { 44 private string azName = "A001->B004的座標方位角"; 45 public string AzName 46 { 47 get { return azName; } 48 set 49 { 50 azName = value; 51 RaisePropertyChanged("AzName"); 52 } 53 } 54 } 55 56 第三步:如果類中存在與介面相關的量,則讓該類繼承類NotifyPropertyObject,並在派生類中在屬性中的Set程式碼塊中進行繫結 57 58 public class Ellipsoid : NotifyPropertyObject 59 { 60 private double _a; //長半軸 61 public double a 62 { 63 get => _a; 64 set 65 { 66 _a = value; 67 if (_a > 0 && _f > 0) 68 { 69 Init(a, f); 70 } 71 72 RaisePropertyChanged("a"); 73 } 74 } 75 } 76 77 第四步:在介面設計程式碼中進行繫結 78 79 示例: 80 1、<TextBox Grid.Column="2" VerticalAlignment="Center" Text="{Binding CurrentEllipsoid.a}" 81 IsEnabled="{Binding CurrentEllipsoid.IsCustomEllopsoid}"/> 82 2、<ComboBox VerticalAlignment="Center" ItemsSource="{Binding EllipsoidList}" 83 SelectedItem="{Binding CurrentEllipsoid}"/> 84 3、Title="{Binding Title}" 注意:標題也可繫結
經以上四步走,WPF資料繫結工作已經基本完成,實驗證明該方法提高了程式的容錯能力,以及程式資料結構的健壯性。