有没有办法让每次单击 ListView 中的选择时触发 selectionchanged 事件,而不是仅在它更改时触发?
例如,假设我有一个 ListView ,其中只有一个对象。用户单击该对象,该对象包含填充下面某些文本框的信息。用户开始更改这些文本框(未绑定(bind)到对象)中的一些值。然后他们决定不想要那些文本框中的内容,因此他们想将所有内容重置为 ListView 中对象中的内容。但是当他们单击 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# - listview.selectionchanged,我可以让它在我每次点击一个项目时触发吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1089321/