或許之前看過.net4.0的新特性,或許哪個技術文章或者源代碼中使用了dynamic類型,不過都沒特別注意過它,平時也基本不會和它打交道。今天遇到了個問題,百思不得姐。
先引入dynamic類型的定義:
在通過 dynamic 類型實現的操作中,該類型的作用是繞過編譯時類型檢查, 改為在運行時解析這些操作。
不同於var,var一般在定義局部變量的時候使用,往往你都不用考慮它是什么類型的變量,你只管使用她就行了。var這個語法糖比較甜,平時用的也比較多。與dynamic類型相反,它是個編譯時就解析這個行為。
前台定義了DataGrid,binding了一個ItemsSource,但是后台的源不止一個,我想在不同的條件判斷下顯示不同的源。(MVVM下的Demo)
xaml:
<DataGrid ItemsSource = {Binding DataShowItemsSource}/>
要binding的兩個源:
//Source A public class Student { public int Age { get; set; } public string Name { get; set; } } //Source B public class Course { public string Name { get; set; } public string CourseName { get; set; } }
保存這兩個源並且具有通知屬性的集合,毫無疑問binding DataGrid的ItemsSource的屬性也是ObserverableCollection類型的:
ObserverableCollection<Student> studentList;
ObserverableCollection<Course> courseList;
現在的問題是該ItemsSource到底應該存什么樣的類型,Student?or Course?如果我想做類似的事情,通過條件判斷我就能binding不同的源:
if(A) { ShowDataItemsSource = studentList; } if(B) { ShowDataItemsSource = courceList; }
可是ShowDataItemSource有可能是兩種泛型:ObserverableCollection<Student> 或者ObserverableCollection<Course>,但是我們只有在if判斷之后才能明確知道ShowDataItemsSource的具體類型。
有了dynamic,只要將DataShowItemsSource類型定義為dynamic就可以在運行時判斷它的類型了。
想想如果回到4.0以前,我是不是要考慮建兩個view,或者建兩個DataGird,或者干脆把這兩個數據源對象寫在一起?