문제

ListView의 선택을 클릭 할 때마다 선택 변경 이벤트를 발사 할 수있는 방법이 있습니까?

예를 들어, 객체가 하나만있는 ListView가 있다고 가정 해 봅시다. 사용자는 해당 객체를 클릭하고 해당 개체에는 아래의 일부 텍스트 상자를 채우는 정보가 포함되어 있습니다. 사용자는이 텍스트 상자의 일부 값을 변경하기 시작합니다 (객체에 바인딩되지 않음). 그런 다음 텍스트 상자에있는 것을 원하지 않기 때문에 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;
    }
}

따라서 IT AD NaSeum을 다시 선택할 수 있습니다. 그러나 실제 선택이 필요하지 않으면 항목 통제.

항목의 선택 가능성을 유지하려면 ListView.SelectionChanged 또는 ListView.Selected와 다른 이벤트에 등록하는 것을 살펴 봐야합니다. 이를 위해 잘 작동하는 것은 초기 항목 선택과 마찬가지로 왼쪽 클릭과 마우스 오른쪽 클릭 모두에서 발생할 수 있도록 미리보기로드입니다. 우리는 단일 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);
}

다른 팁

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