c# - Update binding of TreeViewItem using code? (XAML / WPF) -
मेरे पास TreeView
जिसका ItemsSource
एक मॉडल I पर सेट है की है। 3 स्तर गहरा एक वस्तु है जिसका राज्य बदल सकता है और प्रत्येक चरण (बहुत लंबा व्यवसाय) के लिए एक व्यू और व्यू मॉडेल लिखने के बजाय मैं इसे कोड का उपयोग करके अपडेट करना चाहता हूं।
इसलिए मूल रूप से मेरे पास एक इवेंट है मेरे मॉडल के अपडेट के बाद निकाल दिया जाता है, मैं इसे पकड़ता हूं और फिर इस डेटा के साथ जुड़े TreeViewItem
को ढूंढता हूं
क्या कोई भी मदद कर सकता है?
मुझे पता है कि यह सबसे अच्छा अभ्यास नहीं है लेकिन मैं वास्तव में एक समय के लिए कोड को बड़े पैमाने पर लिखने में समय बर्बाद नहीं करना है, बस एक चीज़ को अपडेट करने के लिए।
धन्यवाद क्रिस
यह उदाहरण काम करता है, हालांकि यह केवल दो (3 नहीं) स्तर गहरा है यह संख्यात्मक बच्चों (ए .1, बी .1, आदि) के साथ, माता-पिता, ए, बी और सी के साथ एक साधारण 2-स्तरीय पदानुक्रमित वृक्षचित्र दिखाता है। जब नाम बदलें B.1 बटन क्लिक किया जाता है, तो इसे B.1 को "सिल्विया" का नाम दिया जाता है।
System.Collections.Generic का उपयोग कर; System.Windows का उपयोग कर; System.Windows.Controls का उपयोग कर; नाम स्थान अपडेटविनाबिंगवैल्यू {/// & lt; सारांश & gt; /// विंडो 1. xaml के लिए इंटरैक्शन लॉजिक /// & lt; / सारांश & gt; सार्वजनिक आंशिक वर्ग विंडो 1: विंडो {निजी डेटाक्लाज़ _डेटा; सार्वजनिक विंडो 1 () {InitializeComponent (); Var डेटा = बनाएँडेटा (); DataContext = _data = डेटा; } निजी डेटाक्लायस बनाएँडेटा () {नए डाटाक्लस वापस करें (माता-पिता = नई सूची & lt; अभिभावक & gt; {नए माता - पिता {नाम = "ए", बच्चे = नया सूची & lt; बाल & gt; {नया बच्चा} नाम = "ए 0"}, नया बच्चा {नाम = "ए 1"}}}, नए माता - पिता {नाम = " बी ", बच्चे = नया सूची & lt; बाल & gt; {नया बच्चा} {नाम =" बी 0.0 "}, नया बच्चा {नाम =" बी .1 "}, नया बच्चा {नाम =" बी 2 "}}}, नया माता-पिता {नाम = "सी", बच्चे = नई सूची & lt; बाल & gt; {नया बच्चे} {नाम = "सी 0.0"}, नया बच्चा {नाम = "सी 1"}}}}}; } निजी शून्य Rename_Click (ऑब्जेक्ट प्रेषक, RoutedEventArgs ई) {var parentB = _data.Parents [1]; Var पैरेंटिबिटम = TheTree.ItemContainerGenerator.ContainerFromItem (parentB) TreeViewItem के रूप में; माता-पिता। बच्चे [1] .नाम = "सिल्विया"; Var पैरेंटिबाइटम्स सोर्स = पेरेंट बीआईटीम.आईटीम्स सोर्स; ParentBItem.ItemsSource = null; ParentBItem.ItemsSource = parentBItemsSource; }} सार्वजनिक वर्ग DataClass {सार्वजनिक सूची & lt; माता-पिता & gt; माता-पिता {प्राप्त करें; सेट; }} सार्वजनिक वर्ग माता-पिता {सार्वजनिक स्ट्रिंग नाम {get; सेट; } सार्वजनिक सूची & lt; बाल & gt; बच्चे {प्राप्त करें; सेट; }} सार्वजनिक वर्ग बच्चे {सार्वजनिक स्ट्रिंग नाम {get; सेट; }}} & Lt; विंडो x: कक्षा = "अपडेटविनाविला बाध्यकारी। विन्डो 1" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns: x = "http://schemas.microsoft.com / Winfx / 2006 / xaml "शीर्षक =" विंडो 1 "ऊंचाई =" 300 "चौड़ाई =" 300 "& gt; & LT; ग्रिड & gt; & LT; Grid.Resources & gt; & Lt; DataTemplate x: Key = "ChildTemplate" & gt; & Lt; टेक्स्टब्लॉक मार्जिन = "50,0,0,0" टेक्स्ट = "{बाध्यकारी नाम}" / & gt; & Lt; / DataTemplate & gt; & Lt; पदानुक्रमितडेटाटेम्पलेट एक्स: कुंजी = "पेन्टटाइमप्लेट" आइटम्स सोर्स = "{बाध्यकारी बच्चे}" आइटमटैम्प्लेट = "{स्टेटिक रिसोर्स चाइल्ड टेम्प्लेट}" & gt; & Lt; TextBlock Text = "{बाध्यकारी नाम}" / & gt; & Lt; / HierarchicalDataTemplate & gt; & LT; /Grid.Resources> & Lt; TreeView x: नाम = "TheTree" आइटमसोर्स = "{बाध्यकारी माता-पिता}" आइटमटैम्प्लेट = "{स्टेटिक रीसोर्स पैरेन्टटामप्लेट}" / & gt; & Lt; बटन कार्यक्षेत्र अनुरेखण = "नीचे" क्षैतिज संरेखण = "केंद्र" सामग्री = "नाम बदलें B.1" Click = "Rename_Click" / & gt; & Lt; / ग्रिड & gt; & Lt; / विंडो & gt;
यह एक हैक है, लेकिन यह हर बार जब यह आइटम वस्तुओं संपत्ति में परिवर्तन होता है तो डेटाटामप्लेट का पुनः मूल्यांकन करता है।
आदर्श रूप से, आप अपने मॉडल ऑब्जेक्ट क्लास पर INOTifyPropertyChanged को कार्यान्वित करेंगे कि यह TreeViewItem के लिए बाध्य है, और यह है कि मूल्य में परिवर्तन जब PropertyChanged घटना आग। वास्तव में, आपको सावधान रहना चाहिए कि आप स्मृति रिसाव नहीं उठा रहे हैं क्योंकि यह नहीं है।
Comments
Post a Comment