WPF依賴項屬性


WPF中的依賴項屬性

 

WPF的工程是由XAML文件和C#文件溝通構成的。C#在工程中主要用於處理邏輯,而XAML則用來在軟件界面上顯示。很多情況下我們都希望后台的屬性改變之后能夠在前台的界面上也呈現出來這種變化。常見的這種通知變化的方式有兩種,分別是:

1. 使用PropertyChangedEventHandler在屬性改變的時候通知用戶界面。

2. 使用依賴項屬性。

 

例子:

XAML文件:

<TextBox   Text="{Binding Path=StudentAge}"

                       Grid.Row="3"

                       Grid.Column="2"

                       VerticalAlignment="Top" Margin="0,5,0,0" />

 

說明:在這個文件中放置了一個TextBox,該元素的Text屬性與數據模型中的屬性StudentAge

綁定。

C#文件:

 

       int _studentAge;

        public int StudentAge

        {

            get

            {

                return _studentAge;

            }

            set

            {

                _studentAge = value;

            }

        }

 

說明:在C#文件中雖然定義了StudentAge屬性,並完成了與XAML的綁定,但是現在屬性值改變的時候UI界面上不會發生改變。這就需要前面提到的兩種處理方式去實現后台數據與前台UI之間的同步變化。

 

方式一:使用PropertyChangedEventHandler在屬性改變的時候通知用戶界面。

        #region INotifyPropertyChanged Members

 

        public event PropertyChangedEventHandler PropertyChanged;

 

        #endregion

 

        void OnPropertyChanged(string propertyName)

        {

            if (PropertyChanged != null)

                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

        }

        int _studentAge;

        public int StudentAge

        {

            get

            {

                return _studentAge;

            }

            set

            {

                _studentAge = value;

                OnPropertyChanged("StudentAge");      //這句代碼很重要,用其通知前台界面//去改變

            }

        }

 

說明:首先申明一個PropertyChangedEventHandler事件,並實現OnPropertyChanged函數。用於觸發事件,並通知用戶界面改變。

 

小結:通過以上的方法就能夠實現后台數據改變並在前台界面上顯示的效果。這是一種方法。還有一種方法就是下面將要說明的依賴項屬性。

 

方法二:依賴項屬性

        public static readonly DependencyProperty StudentAgeProperty = DependencyProperty.Register("StudentAge",

                                                                                                   typeof (int),

                                                                                                   typeof (StudentData));

 

        public int StudentAge

        {

            get { return (int)GetValue(StudentAgeProperty); }

            set { SetValue(StudentAgeProperty, value); }

        }

 

說明:依賴項屬性使用的時候只需要先創建一個依賴項的實例。如上面的StudentAgeProperty。創建的時候調用Register注冊。注冊函數的參數包含了屬性名。然后按照上面的方式聲明屬性就可以了。

 

總結:在自定義類中一般都比較少使用依賴項屬性,使用的時候用前面的第一種方式解決就可以了(使用依賴項屬性的時候會出現錯誤,因為GetValue和SetValue函數都是來自於Control類的,自定義類繼承於這個類才能使用這兩個方法)。但是對於要擴展一個控件的屬性的時候依賴項屬性就比較有用了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM