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

前臺:框架

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

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

後臺:this

 this.TestCaseDataGrid.DataContext = Data.PagerSource;

Data.PagerSource是什麼類型?spa

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

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

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

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

    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類,發現了兩個方法:get

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

 

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

好了,今天就到這裏。

相關文章
相關標籤/搜索