使用ItemsSource和foreach循环在ListView中分配数据有什么区别?

Tow*_*hid 4 wpf listview visual-studio-2010

以下代码片段之间是否有任何区别?
我正在使用VS 2010,.NET 4,WPF

代码片段1:

  List<EPutAway> listEPutAway = new List<EPutAway>();
  // assign some data in listEPutAway here
  lvPutWaySearch.ItemsSource = listEPutAway;   // lvPutWaySearch is a ListView

代码片段2:

  List<EPutAway> listEPutAway = new List<EPutAway>();
  // assign some data in listEPutAway here
  foreach (var ePutAway in listEPutAway)
                {
                    lvPutWaySearch.Items.Add(ePutAway); // lvPutWaySearch is a ListView
                }

Jon*_*Jon 9

很大的不同.

在第一个场景中,您绑定到listEPutAway集合.这意味着如果集合实现INotifyCollectionChanged,对它的任何更改都将自动反映在绑定到它的控件中.

当然,在这个具体的例子中,List(哪个类正是那个?)可能没有实现这个接口.通常在绑定时,您选择绑定到某个ObservableCollection<T>特定原因.

在第二种方案中,您手动向控件提供项目列表.然后,控件中的数据完全独立于应用程序中可能发生的任何其他内容.

WPF的一个主要吸引力是对数据绑定的特别支持,因此"WPF方式"是第一个场景(并且在XAML中也声明了绑定).

作为旁注,您应该记住,不可能同时使用Items(手动填充)和ItemsSource(数据绑定).