wpf研究之道——datagrid控件數據綁定


前台:

<DataGrid x:Name="TestCaseDataGrid"    ItemsSource="{Binding}" >

{binding} 是個簡寫的方式,綁定的是datagrid 對象的DataContext

后台:

 this.TestCaseDataGrid.DataContext = Data.PagerSource;

Data.PagerSource是什么類型?

       public ObservableCollection<T> PagerSource
        {
            get { return pagerSource; }
            set
            {
                pagerSource = value;
                NotifyPropertyChanged("PagerSource");
            }
        }

public class ObservableCollection<T> : Collection<T>, INotifyCollectionChanged, INotifyPropertyChanged

通過查看定義,原來綁定的是個泛型集合,而且還實現了兩個接口,這兩個接口定義了集合變動的事件,界面和ViewModel實現數據同步的。

T代表了一個ViewModel對象,ViewModel對象的屬性和UI界面同步的話,需要實現INotifyPropertyChanged這個接口

    public event PropertyChangedEventHandler PropertyChanged;

        protected void Notify(string propName)
        {

            if (PropertyChanged != null)
            {

                PropertyChanged(this, new PropertyChangedEventArgs(propName));
            }
        }

PropertyChanged 這個事件是什么時候訂閱呢?我不禁有這樣的疑問,想一想,也是wpf mvvm框架訂閱了這個事件。在網上查了下:

 

 我們看看前台的綁定情況

<DataGridTextColumn Header="標題"  Width="3*" Binding="{Binding SearchTitle, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

 想一想微軟如何處理?

 

打開DataGridTextColumn類,發現了兩個方法:

這說明了框架自動生成列單元格,不是TextBox,就是TextBlock,而我們在界面上綁定的值,其實最后賦給它們的Text屬性了。

 

這是父類中定義的方法,綁定的處理,看來就在這里面了,有興趣的話,再去研究。

好了,今天就到這里。

 


免責聲明!

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



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