我是Binding和WPF的新手,我已经学习了如何listBox使用Binding技术创建具有多列的
listBox
<ListView ItemsSource="{Binding Items}" Margin="306,70,22,17" MouseDoubleClick="listBoxSS_MouseDoubleClick" Name="listBoxSS" > <ListView.View> <GridView> <GridView.Columns> <GridViewColumn Header="first_name " Width="100" DisplayMemberBinding="{Binding Path=First_name}" /> <GridViewColumn Header="last_name" Width="100" DisplayMemberBinding="{Binding Path=Last_name}" /> <GridViewColumn Header="phone_number" Width="100" DisplayMemberBinding="{Binding Path=Phones[0]}" /> <GridViewColumn Header="notes" Width="100" DisplayMemberBinding="{Binding Path=Notes}" /> </GridView.Columns> </GridView> </ListView.View> </ListView>
这是代码:
List<Student> arr = search.students(); listBoxSS.ItemsSource = arr;
但是问题是当我尝试使用添加或删除项目或清除时
listBoxSS.Items.Clear();
请提供使用物品来源或添加,删除物品或清除列表的方式的示例。
编辑:
ObservableCollection<Employee> Gemployees; var employees = new ObservableCollection<Employee>(search.employees());
search.employees() 获取我数据库中所有员工的列表
search.employees()
listBoxPE.ItemsSource = employees; Gemployees = employees;
现在我可以对Gemployees执行所有方法
Gemployees.Remove((Student)listBoxSS.SelectedItem); Gemployees.Add((Student)listBoxSS.SelectedItem);
该ListView每当我添加或删除Gemployees的项目进行刷新!很酷,但在绑定方面仍然有些艰苦。现在,我正在为每个ListView做一个接口类,以便可以将其放入其中。它不会在添加项目中表现出任何灵活性。
ListView
你绑定ItemsSource在一个属性DataContext叫Items,所以要更新集合,你需要去Items的财产DataContext和清除。
ItemsSource
DataContext
Items
另外,该Items属性的类型必须为ObservableCollection,List如果您希望在基础集合发生更改时更新UI ,则不需要。
ObservableCollection
List
您ItemsSource不需要在后面的代码中设置代码的位,因此应将其删除。您只需要将其设置ItemsSource在一个位置,而不是两个都设置。
这是一个如何工作的简单示例:
// Using Students instead of Items for the PropertyName to clarify public ObservableCollection<Student> Students { get; set; } public MyConstructor() { ... Students = search.students(); listBoxSS.DataContext = this; }
现在,当您拥有:
<ListView ItemsSource="{Binding Students}" ... />
您将绑定ItemsSource到ObservableCollection<Student>,并且要清除列表时可以调用:
ObservableCollection<Student>
Students.Clear()