我是 Binding 和 WPF 的新手,最近我学会了如何使用 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();
请给我一个使用项目源的示例,或者我可以添加或删除项目或清除列表的方式。
编辑:
<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>
代码如下:
ObservableCollection<Employee> Gemployees;
var employees = new ObservableCollection<Employee>(search.employees());
search.employees()
获取我的数据库中所有员工的列表
listBoxPE.ItemsSource = employees;
Gemployees = employees;
现在我可以在 Gemployees 上执行所有方法
Gemployees.Remove((Student)listBoxSS.SelectedItem);
Gemployees.Add((Student)listBoxSS.SelectedItem);
每当我从 Gemployees 添加或删除项目时,ListView
都会执行刷新!!很酷,但在装订方面仍然有点辛苦。现在我正在为每个 ListView 做一个接口(interface)类,这样我就可以把我的东西放进去。它不会在添加项目时执行任何灵 active 。
最佳答案
您正在绑定(bind) ItemsSource
到DataContext
中的一个属性称为 Items
,所以要更新收藏,您需要转到 Items
DataContext
中的属性(property)并清除它。
此外,Items
属性必须是 ObservableCollection
类型, 不是 List
如果您希望它在基础集合发生变化时更新 UI。
您设置 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}" ... />
您正在绑定(bind) ItemsSource
到 ObservableCollection<Student>
,当你想清除列表时,你可以调用:
Students.Clear()
关于c# - 在使用 ItemsSource 时操作无效。改为使用 ItemsControl.ItemsSource 访问和修改元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11089104/