有没有办法每次在ListView选择被点击的时间,使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;
    }
}

因此,让您重新选择它广告nauseum。不过,如果你并不需要实际的选择,那么你应该使用的 ItemsControl的

如果你想保持项目(S)的选择能力,那么你应该看看注册到比ListView.SelectionChanged,或ListView.Selected不同的事件。一说这个效果很好是PreviewMouseDown,像最初的项目选择,我们希望它在左,右点击发生。我们可以通过使用ListView控件的ItemContainerStyle属性附加到单个ListViewItem的,但由于该表可能在某一时刻获得更多的项目,我们可以将其分配到的所有项目。

<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);
}

其他提示

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
       if(ListView.SelectedIndex != -1)
         {
         //to do staff
         }
       ListView.SelectedIndex = -1;
 }

我们也可以用这一个!

 <ListView x:Name="ListView" 
                                  Height="Auto" SelectionChanged="ListView_OnSelectionChanged"
                                  Width="260"
                                  Margin="0,-12,0,-25">
                                    <ListView.ItemTemplate>
                                        <DataTemplate>
                                            <StackPanel>
                                                <TextBlock Text="{Binding name_to_show_menu,Mode=TwoWay}" Tapped="UIElement_OnTapped"></TextBlock>
                                            </StackPanel>
                                        </DataTemplate>
                                    </ListView.ItemTemplate>
                                </ListView>

和在后面的代码

  private void UIElement_OnTapped(object sender, TappedRoutedEventArgs e)
   {   
           //this fire every time 
   }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top