listview.sectionChanged، هل يمكنني إطلاق النار في كل مرة أقوم بالنقر فوق عنصر؟

StackOverflow https://stackoverflow.com/questions/1089321

سؤال

هل هناك طريقة لجعل حريق الحدث الانتقائي في كل مرة يتم فيها النقر فوق اختيار في ListView، بدلا من فقط عند التغيير؟

على سبيل المثال، دعونا نقول أن لدي قائمة عرض مع كائن واحد فقط فيه. ينقر المستخدم على هذا الكائن، ويحتوي هذا الكائن على معلومات يملأ بعض مربعات النصوص أدناه. يبدأ المستخدم تغيير بعض القيم في صنادس النصر هذه (التي لا تكون مرتبطة بالكائن). ثم يقررون أنهم لا يريدون ما هو في تلك المربعات النصية حتى يرغبون في إعادة تعيين كل شيء إلى ما هو في الكائن في ListView. ولكن عند النقر فوق كائن واحد في ListView، لا يحدث شيء، لأنه لم يتغير التحديد.

نأمل أن تكون المنطقية. أي شخص يعرف كيف يمكنني الحصول على هذا؟

هل كانت مفيدة؟

المحلول

ListView.SectionChanged و ListViewItem.Seviewitem.Selfated لا يتم إعادة الحريق إذا تم تحديد العنصر بالفعل. إذا كنت بحاجة إلى إعادة إطلاق النار عليه، فيمكنك "إلغاء تحديد" العنصر عند حرائق الحدث.

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.SectionChanged، أو ListView.Selfected. واحد يعمل بشكل جيد لهذا هو المعنى بمعنى ما هو محدد، مثل اختيار العنصر الأولي الذي نريده حدوثه على كل من النقرات اليسرى واليمين. يمكننا إرفاقها إلى ListViewItem الفردي، ولكن نظرا لأن القائمة قد تكسب المزيد من العناصر، يمكننا تعيينها إلى جميع العناصر باستخدام خاصية ItemContainerstyle ل ListView.

<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