2010-02-17 19 views
11

मैं सूची दृश्य में एकाधिक आइटम चुनने और उन्हें एक निश्चित कार्रवाई पर हटाने का तरीका ढूंढ रहा हूं। मुझे क्या पता नहीं लगा सकता है, मुझे इन एकाधिक आइटमों को कैसे चुना जाना चाहिए? मुझे लगता है कि एक सूची है जिसे मुझे उन सभी को जोड़ने की आवश्यकता होगी, लेकिन इस स्थिति तक पहुंचने का सबसे अच्छा तरीका क्या है, क्या आपके पास कोई विचार है? धन्यवाद! -KevinWPF ListView एकाधिक सूची दृश्य आइटम का चयन

उत्तर

21

सेट SelectionModeMultiple करने के लिए या Extended और अपने ListView में SelectedItems के माध्यम से पुनरावृति।

+1

यह ध्यान देने योग्य है कि 'SelectionMode.Multiple' में Shift + का उपयोग करने की क्षमता शामिल नहीं है, सभी वस्तुओं का चयन करने के लिए लगातार आइटम या Ctrl + A का चयन करने के लिए क्लिक करें।एक बग/निरीक्षण की तरह लगता है। – Livven

+0

टूटा लिंक - चयनित इटम्स। –

+0

फिक्स्ड! धन्यवाद!! – Arcturus

4

आप निम्न में से एक कर सकते हैं ...

में कोड-पीछे ListView.SelectionMode = SelectionMode.Extended या

XAML में <ListView SelectionMode="Extended"></ListView>

आप भी 'कई' selectionMode अभी तक आप इसके बजाय 'के लिए जा सकते हैं है विस्तारित 'जो उपयोगकर्ता को केवल शिफ्ट संशोधक का उपयोग करके कई वस्तुओं का चयन करने की अनुमति देता है।

इस प्रकार आप ListView.SelectedItems प्रॉपर्टी इस्तेमाल कर सकते हैं चयनित आइटम को हटाने के लिए

while(myListView.SelectedItems.Count > 0) 
{ 
    myListView.Items.Remove(list.SelectedItems[0]); 
} 

[या आप SelectedIndices संपत्ति इस्तेमाल कर सकते हैं]

आशा इस मुद्दे आप का सामना करना पड़ा से बचने जाएगा :)

चीयर्स!

8

मेरा सुझाव है ListView की SelectedItems संपत्ति का उपयोग नहीं करने के बजाय, एक ListViewItem की Selected संपत्ति बाँध एक इसी ViewModel वर्ग के लिए होगा। इसके बाद, आपको केवल ViewModel ऑब्जेक्ट को Selected संपत्ति TRUE को बाध्य करने वाली वस्तु को खोजने के लिए केवल एक चीज है, उन्हें मॉडल संग्रह से हटा दें (यदि आप हटाते हैं) और UI को रीफ्रेश करें। यदि संग्रह ObservableCollection है, तो UI स्वचालित रूप से रीफ्रेश हो जाएगा। गुड लक।

+2

क्या आप किसी भी कारण से प्रदान कर सकते हैं कि आपको 'SelectedItems' प्रॉपर्टी का उपयोग क्यों नहीं करना चाहिए? –

+1

क्योंकि यह डिज़ाइन को अधिक जटिल बनाता है और इससे बग का कारण बन सकता है। यदि आपके पास आइटम ऑब्जेक्ट में मौजूद प्रत्येक ऑब्जेक्ट पर एक चयनित प्रॉपर्टी है, तो आप प्रत्येक आइटम को इस तरह से आसानी से बाध्य कर सकते हैं:

+0

@NomanKhan होना चाहिए ListViewItem नहीं ListBoxItem; मुझे लगता है कि आधार पर भी कोई ज़रूरत नहीं है ... लेकिन अच्छी टिप्पणी, मेरी मदद की! –

0

सफलता भी लिख

while (lvJournalDetails.SelectedItems.Count > 0) 
{ 
    lvJournalDetails.Items.Remove(lvJournalDetails.SelectedItem); 
} 
1

आर्कटुरस जवाब अगर आप MVVM उपयोग नहीं कर रहे अच्छा है द्वारा WPF ListView प्राप्त करें। लेकिन यदि आप करते हैं और आपके आइटमसोर्स को आपके व्यूमोडेल में ऑब्जेक्ट्स के कुछ अवलोकन करने योग्य चयन से जोड़ा जाता है, तो मैं नोमन खान स्पष्टीकरण के साथ टिग्रान के उत्तर की सिफारिश करता हूं।

यह कैसा दिखेगा कैसे:

<ListView ItemsSource="{Binding SomeListViewList}"> 
    <ListView.Resources> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="IsSelected" Value="{Binding SomeItemSelected, Mode=TwoWay}" /> 
     </Style> 
    </ListView.Resources> 
    ... 
</ListView> 

देखें मॉडल में आप वस्तु होगा:

public class SomeItem 
{ 
    public string SomeItemName { get; set; } 

    public string SomeItemNum { get; set; } 

    public bool SomeItemSelected { get; set; } 
} 

तो आप: public ObservableCollection<SomeItem> SomeListViewList{ get; set; }

SomeItem कक्षा एक चयनित संपत्ति को शामिल किया जाएगा सूची में पुन: चलाएं/चलाएं और चुने गए लोगों को प्राप्त करें:

foreach (var item in SomeListViewList) 
    if (item.SomeItemSelected) 
     // do something 
संबंधित मुद्दे