我有一个列表视图绑定到一个Observable Collection'People',People包含具有'Name'属性的人,它给了我一个人的表.
我想为此表的每一行都有一个删除按钮,显示在最后一列.以下是一个有效的实施.然而,处理程序和XAML是非常交织在一起的,这并不好.我怎么能通过我删除的那个人?
XAML:
<ListView ItemsSource="{Binding People}" Name="ListViewPeople">
<ListView.View>
<GridView>
<GridViewColumn>
<GridViewColumnHeader>Names</GridViewColumnHeader>
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Names}"></TextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" Click="Button_Click_Delete"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)
我已设法使用此处理程序实现此功能,但正如您所看到的,这意味着支持代码必须详细了解该视图.这将获取从ListView按下的删除按钮的索引,并从我的可观察集合中删除该值.
c#代码:
private void Button_Click_Delete(object sender, RoutedEventArgs e)
{
DependencyObject dep = (DependencyObject)e.OriginalSource;
while ((dep != null) && !(dep is ListViewItem))
{
dep = VisualTreeHelper.GetParent(dep);
}
if (dep == null)
return;
int index = ListViewPeople.ItemContainerGenerator.IndexFromContainer(dep);
People.RemoveAt(index);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以将我已删除的可观察集合的哪个成员传递给我的处理程序,以便处理程序不必知道有listview等?
Button btn = (Button)sender;
People.Remove((Person)btn.DataContext);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2261 次 |
| 最近记录: |