1、控件的 ItemsSource 和 Items 的区别:
ItemsSource 只是继承于 IEnumerable 接口 , 只是一个接口而已,所以在构造初期是不会被实例化的。
Items: Items是一个 ItemCollection ,是一个实际的一个容器,所以在实例化时是有值的。
所以在使用的时候,如果我们的后台数据是在运行时才准备的话,就使用 ItemsSource , 如果只是一些界面元素上的数据,不需要在运行时赋值时而是一开始准备好的话,就可以在Items中赋值。
也就是说 ItemsSource 这个值是运行时可以变的,是我们赋值的,只有运行时才会发现数据源在哪。而Items是已经有了一个容器,也就是说它已经在内部自己赋值了,我们要做就只是在里面Add值。
如果是两个属性一起赋值的话:
1、如果是在设计时(blend里面)两个都有的话,那它会在你设置ItemsSource时,自动remove 掉Items属性里面的元素。
2、如果是在运行时的,两个属性都设置的时候,会出错!
使用这两个赋值要注意的:
Items :如果是以这样方式来add的话,每一个 Item 对于不同的控件是不同的。
TabControl 是要add 一个一个的TabItem
ListBox 是要add 一个一个的 ListBoxItem
ItemsSource : 如果是使用这个的话,只要数据源是继承于 IEnumable接口的就都可以。
例如:Array , List<T> , Collection<T> , Dictionary<T>
可以看到ItemsSource 形式有这么多种,那么在控件中是怎么表示的,这个SL是不知道的,所以默认情况下,它
只会将你这个ItemsSource里面的类名显示出来,要真正显示出来有意义的值,我们就要定制一个模板,绑定类里的值。