Tuesday, 15 May 2012

c# - Change ItemsControl content from codebehind -


मेरे पास wpf नियंत्रण TimeLineControl कोड के साथ है:

  .. & lt; आइटमोंकंट्रोल आइटम्स सोर्स = "{बाइनिंग टाइमलाइन इटम्स}" & gt; & LT; ItemsControl.ItemTemplate & gt; & LT; DataTemplate & gt; & Lt; रंग लाइइन: टाइमलाइन इटैम / & gt; & Lt; / DataTemplate & gt; & LT; /ItemsControl.ItemTemplate> & LT; ItemsControl.ItemsPanel & gt; & LT; ItemsPanelTemplate & gt; & Lt; स्टैकपैनेल ओरिएंटेशन = "क्षैतिज" / & gt; & Lt; / ItemsPanelTemplate & gt; & LT; /ItemsControl.ItemsPanel> & Lt; / ItemsControl & gt; ...  

ColorLine मेरा नेमस्पेस है, TimeLineItem मेरा UserControl है। वर्तमान में मैं ItemsSource को मेरे TimeLineViewModel ( TimeLineControl के लिए ViewModel) में बाध्य करें:

  ... निजी ऑब्ज़्वेशेबल कोलेक्शन & lt; TimeLineItemViewModel & gt; _timeLineItems; सार्वजनिक पर्यवेक्षण योग्यता & lt; टाइमलाइन इटैमव्यू मॉडल & gt; टाइमलाइनइटेम्स {प्राप्त करें {लौटें _timeLineItems; } निजी सेट {if (_timeLineItems == मान) वापसी; _timeLineItems = मूल्य; OnPropertyChanged (() = & gt; टाइमलाइनइटम); }} ...  

मैं इसे टाइमलाइन आइटम में ItemsControl dynamicaly की संख्या बदलने के लिए उपयोग करता हूं।

लेकिन मैं इस 2 रिडुडांट व्यू मॉडेल्स ( TimeLineViewModel और TimeLineItemViewModel ) से छुटकारा पाने के लिए चाहता हूं, जहां तक ​​वास्तव में मैं इसका उपयोग केवल 1 मूल्य को नियंत्रित करने के लिए करता हूं: TimeLineItems - मुझे पता है कि यह तर्क भविष्य में जारी रहेगा और परिवर्तन नहीं करेगा।

इसलिए मुझे अपना टाइमलाइन नियंत्रणाधिकार बिना व्यू मॉडल के रखना चाहते हैं, लेकिन कस्टम निर्भरता प्रॉपर्टी (मुझे लगता है) कोड के पीछे, उस प्रकार का int होगा इसे कॉल AmountOfSectionsProperty पर कॉल करें जब AmountOfSectionsProperty बदल जाएगा, तो यह TimeLineItems में ItemsControl में इसके मान को बदलता है।

मैं इस संपत्ति को इस तरह लागू करता हूं :

  सार्वजनिक रीडोनली स्टैटिक निर्भरता प्रॉपर्टी AmountOfSectionsProperty = DependencyProperty.Register ("AmountOfSections", typeof (int), टाइपफ (टाइमलाइन नियंत्रण), नया फ्रेमवर्कप्रापर्टीमैटेटाडेटा (1, फ़्रेमवर्कप्रॉपर्टीमैटडेटाओपेशंसएफ़िफर्सपेरेंट मेज़र, AmountOfSectionsChangedCallback, CoerceAmountOfSectionsCallback)); निजी स्टेटिक ऑब्जेक्ट कॉससएरमाउंटऑफ़सेक्शन कॉलबैक (निर्भरता ऑब्जेक्ट निर्भरता ऑब्जेक्ट, ऑब्जेक्ट बेस वैल्यू) {var चालू = (इंट) बेस वैल्यू; यदि (वर्तमान & lt; 1) चालू = 1; यदि (वर्तमान & gt; 24) वर्तमान = 24; वर्तमान वापसी; } निजी स्थिर शून्य AmountOfSectionsChangedCallback (निर्भरता ऑब्जेक्ट निर्भरता ऑब्जेक्ट, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs) {नए NotImplementedException फेंक); } सार्वजनिक प्रवीण राशि का विभाजन ({वापसी (पूर्णांक) प्राप्त करें (अमाउंटफ़ोक्शनप्रॉपर्टी); } सेट {सेट वैल्यू (AmountOfSectionsProperty, value); }}  

यह 1..24 रेंज में होना चाहिए। लेकिन मैं थोड़े वास्तविक बाइंडिंग के साथ अटक गया - ItemsControl आइटमों की संख्या बदलने के लिए, मेरी कॉलबैक विधि कैसे दिखनी चाहिए?


No comments:

Post a Comment