c# – listview.selectionchanged,我每次点击一个项目都能点火吗?
作者:互联网
有没有办法在每次单击列表视图中的选择时触发selectionchanged事件,而不是仅在它更改时?
例如,假设我有一个只包含一个对象的列表视图.用户单击该对象,该对象包含填充下面某些文本框的信息.用户开始更改这些文本框中的某些值(未绑定到对象).然后他们决定他们不想要那些文本框中的内容,因此他们想要将所有内容重置为listview中对象中的内容.但是当他们单击列表视图中的一个对象时,没有任何反应,因为选择没有改变.
希望有道理.有谁知道我怎么能解决这个问题?
解决方法:
如果已选择该项,则ListView.SelectionChanged和ListViewItem.Selected事件不会重新触发.如果您需要重新启动它,您可以在事件触发时“取消选择”该项目.
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
foreach (var item in e.AddedItems.OfType<ListViewItem>())
{
Trace.WriteLine("ListViewItem Selected");
item.IsSelected = false;
}
}
因此,您可以重新选择它.但是,如果您不需要实际选择,那么您应该使用ItemsControl.
如果您确实想要维护项目的选择能力,那么您应该注意注册到与ListView.SelectionChanged或ListView.Selected不同的事件.一个效果很好的是PreviewMouseDown,就像我们希望它在左右点击时发生的初始项目选择一样.我们可以将它附加到单个ListViewItem,但由于列表可能在某些时候获得更多项目,我们可以使用ListView的ItemContainerStyle属性将其分配给所有项目.
<ListView SelectionChanged="ListView_SelectionChanged">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<EventSetter Event="PreviewMouseDown"
Handler="ListViewItem_PreviewMouseDown" />
</Style>
</ListView.ItemContainerStyle>
<ListViewItem>Item 1</ListViewItem>
<ListViewItem>Item 2</ListViewItem>
<ListViewItem>Item 3</ListViewItem>
<ListViewItem>Item 4</ListViewItem>
</ListView>
private void ListViewItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
Trace.WriteLine("ListViewItem Clicked: " + (sender as ListViewItem).Content);
}
标签:c,wpf,listview,selectionchanged 来源: https://codeday.me/bug/20190607/1192706.html