2009-09-17 23 views
6

निम्नलिखित कोड को देखते हुए:WPF ListBox ItemsSource StaticResource/बाध्यकारी प्रश्न

<Window x:Class="WpfApplication76.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:col="clr-namespace:System.Collections;assembly=mscorlib" 
    Title="Window1" Height="300" Width="300"> 

    <Window.Resources> 
     <CollectionViewSource x:Key="myCol"> 
      <CollectionViewSource.Source> 
       <col:ArrayList> 
        <ListBoxItem>Uno</ListBoxItem> 
        <ListBoxItem>Dos</ListBoxItem> 
        <ListBoxItem>Tres</ListBoxItem> 
       </col:ArrayList> 
      </CollectionViewSource.Source> 
     </CollectionViewSource> 
    </Window.Resources> 

    <Grid> 
     <ListBox ItemsSource="{StaticResource myCol}" /> 
     <ListBox ItemsSource="{Binding Source={StaticResource myCol}}" /> 
    </Grid> 

</Window> 

इस उदाहरण में,

<ListBox ItemsSource="{StaticResource myCol}" /> 

मुझे शिकायत है कि यह एक "CollectionViewSource" वस्तु के लिए बाध्य नहीं कर सकते हैं एक त्रुटि देता है।

लेकिन दूसरी लिस्टबॉक्स:

<ListBox ItemsSource="{Binding Source={StaticResource myCol}}" /> 

बिल्कुल ठीक बांधता है।

तो मेरा सवाल यह है कि एक काम क्यों करता है और दूसरा नहीं करता है? अंत में, क्या ItenSources दोनों "CollectionViewSource" ऑब्जेक्ट पर सेट नहीं हो रहे हैं?

धन्यवाद।

उत्तर

4

आइटमसोर्स प्रॉपर्टी आईन्यूमेरेबल प्रकार का है। एक संग्रह दृश्यवृत्त एक IENumerable नहीं है। CollectionViewSource की दृश्य संपत्ति आपको एक आईनेमरेबल प्रदान करेगी।

जब आप किसी संग्रह ViewSource से जुड़ते हैं तो बाइंडिंग दृश्य संपत्ति को पकड़ने के लिए पर्याप्त स्मार्ट है और वास्तव में उस से जुड़ती है। शायद CollectionViewSource पर एक [DefaultBindingProperty] है।

यह इस तथ्य को उबालता है कि जब आप बाइंडिंग के माध्यम से जाते हैं तो आप वास्तव में CollectionViewSource से जुड़ नहीं पाते हैं, लेकिन इसकी दृश्य संपत्ति।

+0

धन्यवाद माइक। मुझे एहसास है कि समस्या क्या है। मेरा सवाल वास्तव में और अधिक स्पष्ट था कि बाध्यकारी सिर्फ "संग्रह दृश्यवृत्ति" ऑब्जेक्ट से संपत्ति चुनने की स्वतंत्रता क्यों ले रहा है और बस उस पर निर्भर है? मेरा मतलब है, "स्टेटिक रिसोर्स" एक्सटेंशन एक ही चीज़ करने की स्वतंत्रता क्यों नहीं ले रहा है? – Rene

+2

अनुमान लगाने की तरह, लेकिन स्टेटिक रिसोर्स सिर्फ यह कह रहा है कि "मुझे यह चीज़ मिलें" जहां बाध्यकारी कह रहा है "मुझे कुछ प्राप्त करें जिसे मैं बांध सकता हूं"। स्टेटिक रिसोर्स अधिक शाब्दिक है। इसका उपयोग करने का कोई संदर्भ नहीं है जबकि सिस्टम को बाध्य करने के बारे में पता है कि आप संसाधन के लिए क्यों पूछ रहे हैं। क्रिस एंडरसन की पुस्तक, "आवश्यक WPF" मुझे लगता है। ऐसी चीजों के क्रम का वर्णन करता है जो तब होता है जब बाध्यकारी यह नहीं समझ सकता कि वास्तव में क्या करना है। मेरे पास यह आसान नहीं है लेकिन मैं कोशिश करूँगा और इसे देख लूंगा। यह कह सकता है कि इस मामले में क्या होता है। –

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