काम कर मैं एक ListBox
है कि मैं के माध्यम से गतिशील रूप से पॉप्युलेट एक (यह एक DataTemplate
में परिभाषित किया गया है, जिसके कारण बाध्यकारी कुछ हद तक असामान्य है) बंधन:लिस्टबॉक्स "IsSelected" बाइंडिंग केवल आंशिक रूप से
<ListBox SelectionMode="Extended" ItemsSource="{Binding DataContext.ResultList, RelativeSource={RelativeSource AncestorType=Window}}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding Object}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
प्रत्येक ListBoxItem
' एस IsSelected
संपत्ति कस्टम ऑब्जेक्ट पर IsSelected
संपत्ति से जुड़ी है।
जब मैं व्यक्तिगत ListBoxItem
एस का चयन करता हूं, बाध्यकारी ठीक से काम करता है - कस्टम ऑब्जेक्ट की IsSelected
संपत्ति मेरे व्यूमोडेल में अपडेट की जाती है। हालांकि, अगर मैं Ctrl + A कमांड के साथ ListBoxItem
एस का चयन करता हूं, तो वर्तमान में केवल ListBoxItem
s (जो वर्तमान में मेरे स्क्रॉलिंग व्यूपोर्ट में हैं) उनके व्यूमोडेल बाइंडिंग अपडेट करते हैं। अग्रभाग पर, सभी ListBoxItem
एस का चयन किया जा रहा है, और कंटेनर ListBox
पर संपत्ति दिखाती है कि सभी आइटम चुने गए हैं।
इसके अलावा, के रूप में मैं Ctrl + A के साथ सभी ListBoxItem
रों चयन करने के बाद ListBox
के माध्यम से स्क्रॉल, बाइंडिंग सफलतापूर्वक जब प्रत्येक ListBoxItem
दृश्य में स्क्रॉल किया है अपडेट किया जाता है।
यह बाध्यकारी केवल आंशिक रूप से क्यों काम करता है? IsSelected
संपत्ति के बाध्यकारी को संभालने का कोई बेहतर तरीका है जब बड़ी संख्या में ListBoxItems
एक साथ चुना जा सकता है?
संपादित करें: यह व्यवहार Ctrl + A कमांड के साथ विशेष रूप से नहीं होता है - मैं जब एक पारी + क्लिक का उपयोग कर सभी आइटम का चयन एक ही परिणाम मिलता है।
मैं ऐसा करने के लिए यूआई पर निर्भर नहीं हूं, तो आप 'कीबाइंडिंग' डाल देंगे और इसे व्यूमोडेल में करेंगे, या कुछ कोड पीछे रखें और चयन तर्क को वीएम में प्रतिनिधि दें। या एक व्यवहार या कुछ जो उस महत्वपूर्ण संयोजन पर प्रतिक्रिया करता है डाल दें। –
@ हाइकोकोर - समस्या सभी ऑर्डर को विशेष रूप से चुनें; एक ही समस्या तब होती है जब मैं Shift + क्लिक का उपयोग करके प्रत्येक आइटम का चयन करता हूं। –
मैं इस तरह के मुद्दे में भाग गया। मैंने अभी छोड़ दिया है और [selectItems] (http://msdn.microsoft.com/en-us/library/system.windows.controls.listbox.selecteditems.aspx) पर बाध्यकारी उपयोग किया है, क्लिक पर हैंडलर के लिए तर्क के रूप में बटन, और इसे एक दिन कहा जाता है (आप इसे कमांड के लिए कमांड पैरामीटर के रूप में भी इस्तेमाल कर सकते हैं)। सूची लंबी होने पर वर्चुअलाइजेशन को बंद करने के लिए प्रदर्शन हिट के लायक नहीं है। –