原來還有dynamic這東西。


      或許之前看過.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,或者干脆把這兩個數據源對象寫在一起?

 


免責聲明!

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



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