2010-12-09 10 views
5

क्या बीच का अंतर है:सी # एमवीवीएम डाटाग्रिड बाध्यकारी रणनीतियां?

<DataGrid 
    ItemsSource="{Binding MyCollection}" 
/> 

और ...

<CollectionViewSource x:Key="CollectionData" Source="{Binding MyCollection}"/> 
... 
<DataGrid 
    DataContext="{StaticResource CollectionData}" 
    ItemsSource="{Binding}" 
/> 

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

उत्तर

2

MSDN कहा गया है ...

CollectionViewSource एक दृश्य संपत्ति है कि वास्तविक दृश्य और एक स्रोत संपत्ति है कि स्रोत संग्रह रखती है रखती है।

CollectionViewSource संग्रह का प्रतिनिधित्व करने वाले दृश्य से वास्तविक संग्रह को अलग करता है। यह वास्तव में अंतर्निहित संग्रह को बदले बिना दृश्य संग्रह की दृश्य संरचना (आपके द्वारा टाइप किए जाने वाले कुछ आइटम फ़िल्टर करने पर विचार करें) को बदलने की क्षमता देता है। यह वास्तविक संग्रह के चारों ओर एक रैपर है जिसमें वस्तुओं को दृश्य प्रतिनिधित्व की आवश्यकता होती है। बीए के बारे में article है।

इसके अलावा आप स्पष्ट रैपिंग अपने दूसरे उदाहरण में CollectionViewSource में हो रही पर ध्यान देंगे ...

Source="{Binding MyCollection}" 

फिर CollectionViewCource अब के माध्यम से DataGrid जुदाई कि मैंने पहले बताया प्रदान करने के लिए बाध्य किया जा रहा है; जबकि संग्रह सीधे आपके पहले उदाहरण में बाध्य किया जा रहा था।

1

एक संग्रह दृश्य विज्ञान में अधिक सुविधाएं हैं जो एक पर्यवेक्षण चयन या जो भी IEnumerable आप अपने आइटम स्रोत के लिए उपयोग करते हैं। उदाहरण के लिए, इसमें SortDescriptions है जो आपको डेटा समूह करने की अनुमति दे सकता है। एक उदाहरण here पाया जा सकता है।

टीएलडीआर; यह एक और अधिक शक्तिशाली डेटा संरचना है।

1

एक के रूप में एक तरफ, बशर्ते IsSynchronizedWithCurrentItem डेटा ग्रिड पर सच है, तो आप एक स्लेश अर्थात जोड़कर SelectedItem करने के लिए बाध्य कर सकते हैं {बाइंडिंग /}

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