2009-05-06 19 views
14

WPF में, मैं एक System.Windows.Controls.ListBoxप्रोग्राम एक ListBox में आइटम/इंडेक्स का चयन

मैं सबसे अच्छा तरीका है मैं अब तक मिल गया है के चयनित अनुक्रमणिका निर्धारित करना चाहते हैं सब दूर करने के लिए है नियंत्रण से आइटम, चयनित डालें, SelectAll() पर कॉल करें, फिर बाकी डालें, लेकिन यह समाधान न तो मेरी स्थिति में काम करता है और न ही बहुत ही कुशल है।

तो, आप प्रोग्राम सूची में चुने जाने के लिए सूची बॉक्स में आइटम कैसे सेट करते हैं?

उत्तर

9

एक तरीका यह है कि आप इसे अपने डेटा ऑब्जेक्ट में एक चयनित फ़ील्ड जोड़ना चाहते हैं। फिर आपको डिफ़ॉल्ट listboxitem शैली को ओवरराइड करने और अपनी ऑब्जेक्ट में चयनित संपत्ति में अचयनित संपत्ति को बाध्य करने की आवश्यकता है। फिर आपको बस अपने डेटा आइटम से गुजरना होगा और चयनित मूल्य अपडेट करना होगा।

यदि आप उस प्रॉपर्टी को एक निर्भरता संपत्ति के रूप में लागू नहीं करते हैं, तो आपको अपनी कक्षा को INotifyPropertyChanged इंटरफ़ेस को प्रत्यारोपित करने की आवश्यकता होती है और जब आप मान सेट करते हैं तो प्रॉपर्टी बदलकर ईवेंट बढ़ाते हैं।

+0

यह पूरी तरह से काम किया, बहुत बहुत धन्यवाद! – Alex

+0

धन्यवाद! ... यह ठीक काम किया। मैं बस एक कोड सेगमेंट जोड़ूंगा जिसका मैंने नीचे उपयोग किया था। –

+0

वास्तव में नीचे डैनलाश की तुलना में यह अधिक जटिल है। – henon

2

आप ऐसा करने के लिए है:

ListBoxObject.SelectedItem = ListBoxObject.Items.GetItemAt(itemIndex); 

कहाँ itemIndex आइटम आप चयन करना चाहते हो जाएगा। यदि आप एकाधिक आइटम चुनना चाहते हैं, तो आपको ListBox.SelectedIndexCollection प्रॉपर्टी का उपयोग करने की आवश्यकता है।

+1

System.Windows.Controls.ListBox System.Windows.Forms.ListBox की तरह नहीं है एक चयनित इंडेक्स कोलेक्शन प्रॉपर्टी – Alex

+0

मेरा बुरा। उसके लिए माफ़ करना। – jgallant

+0

चयनित इटैम अभी भी काम करेगा। –

26

आप चयनित आइटम्स संग्रह का उपयोग करके चुने गए कई आइटम सेट कर सकते हैं। यह सूचकांक से नहीं है, लेकिन आप क्या बाध्य है द्वारा:

foreach (var boundObject in objectsBoundToListBox) 
{ 
    ListBox.SelectedItems.Add(boundObject); 
} 
+1

पढ़ा जाता है यह प्रत्येक आइटम जोड़े जाने के लिए चयन चयन ईवेंट को एक बार बढ़ाएगा। जब आप आइटम के समूह को मैन्युअल रूप से शिफ्ट के साथ चुनते हैं तो यह पूरे समूह के लिए केवल एक बार उठाया जाता है। – FreddyFlares

2

प्रोग्राम WPF में लिस्टबॉक्स में एक से अधिक आइटम का चयन करने

foreach (var boundObject in objectsBoundToListBox) 
{ 
    ListBox.SelectedItems.Add(boundObject); 
} 
+0

धन्यवाद, यह चट्टानें! – henon

+5

क्या आपने वास्तव में इस धागे पर डैनलाश से इसे काट और पेस्ट किया था। – Epirocks

1

mdm20 के लिए धन्यवाद। मेरा मामला वास्तव में को ListBox के भीतर जांच रहा था, और यह निर्भरता संपत्ति एक आकर्षण की तरह काम करती थी। मैं DependencyObject से अपने कस्टम वर्ग के वारिस और संपत्ति

public class ProjectListItem : DependencyObject{ 

    public Boolean IsChecked 
    { 
     get { return (Boolean)this.GetValue(CheckedProperty); } 
     set { this.SetValue(CheckedProperty, value); } 
    } 
    public static readonly DependencyProperty CheckedProperty = 
     DependencyProperty.Register("IsChecked", typeof(Boolean), typeof(ProjectListItem), 
            new PropertyMetadata(false)); 
} 
1

आप एक से अधिक वर्गों के लिए ऐसा कर सकते हैं लागू करने के लिए किया था:

ListBoxObject.SelectedItems.Add(ListBoxObject.Items.GetItemAt(i)); 

मैं कहाँ आइटम सूचकांक है।

संबंधित मुद्दे