ट्रीमोडेल को लागू करने के लिए यह काफी अजीब/मुश्किल है, इसलिए अधिकांश लोग अपने "असली" मॉडल से डेटा को ट्रीस्टोर या लिस्टस्टोर में आसानी से सिंक करते हैं।
स्टोर में कॉलम को किसी भी तरह से दृश्य में स्तंभों से मेल नहीं करना पड़ेगा। उदाहरण के लिए, आपके पास एक कॉलम हो सकता है जिसमें आपकी वास्तविक प्रबंधित डेटा ऑब्जेक्ट्स हों।
जब आप एक TreeView (विज़ुअल) कॉलम में सेलरेन्डरर जोड़ते हैं, तो आप इसके गुणों और स्टोर के कॉलम के बीच मैपिंग जोड़ सकते हैं। उदाहरण के लिए, आप एक स्टोर कॉलम को टेक्स्ट सेलरेन्डर के फ़ॉन्ट पर मैप कर सकते हैं, और एक ही स्टोर कॉलर उसी सेलरेन्डर की टेक्स्ट प्रॉपर्टी में मैप कर सकते हैं। प्रत्येक बार जब सेलरेन्डर का उपयोग किसी विशेष सेल को प्रस्तुत करने के लिए किया जाता है, तो मैपिंग का उपयोग स्टोर से मूल्यों को पुनर्प्राप्त करने के लिए किया जाएगा और इसे प्रस्तुत करने से पहले प्रस्तुतकर्ता के गुणों पर लागू किया जाएगा।
यहाँ एक मानचित्रण का एक उदाहरण है:
treeView.AppendColumn ("Title", renderer, "text", 0, "editable", 4);
इस नक्शे की दुकान स्तंभ 0 editable
संपत्ति को रेंडरर के text
जीटीके संपत्ति और नक्शे की दुकान स्तंभ से 4। जीटीके संपत्ति के नामों के लिए आप GTK docs देख सकते हैं। ध्यान दें कि ऊपर दिया गया उदाहरण एक सुविधा विधि का उपयोग करता है जो एक कॉलम जोड़ता है, इसमें एक रेंडरर जोड़ता है और पैराम्स के माध्यम से मैपिंग की मनमानी संख्या जोड़ता है। सीधे कॉलम पर मैपिंग जोड़ने के लिए, उदाहरण के लिए एकाधिक रेंडरर वाले कॉलम, कॉलर में रेंडरर पैक करें, फिर TreeViewColumn.AddAttribute
या TreeViewColumn.SetAttributes
का उपयोग करें।
आप एक कस्टम डेटा फ़ंक्शन भी सेट अप कर सकते हैं जिसका उपयोग मैपिंग के बजाय किया जाएगा। यह आपको ट्रीइटर और स्टोर को सीधे प्रस्तुतकर्ता के गुणों को सेट करने की अनुमति देता है - इसलिए, यदि आप जिस डेटा को प्रदर्शित करना चाहते हैं वह आपके वास्तविक डेटा ऑब्जेक्ट्स से छोटा रूप से व्युत्पन्न होता है, तो आप अपने स्टोर में केवल एक कॉलम भी ले सकते हैं इन ऑब्जेक्ट्स, और सभी व्यू कॉलम के लिए डेटा funcs का उपयोग करें।
यहाँ एक डेटा समारोह है कि वास्तव में है क्या मानचित्रण उपरोक्त उदाहरण करता है की एक उदाहरण है:
treeColumn.SetCellDataFunc (renderer, delegate (TreeViewColumn col,
CellRenderer cell, TreeModel model, TreeIter iter)
{
var textCell = (CellRendererText) cell;
textCell.Text = (string) model.GetValue (iter, 0);
textCell.Editable = (bool) model.GetValue (iter, 4);
});
जाहिर डेटा कार्यों कहीं अधिक शक्तिशाली है क्योंकि वे आप न केवल और अधिक जटिल जीटीके वस्तुओं के गुणों का उपयोग करने के लिए सक्षम हैं, लेकिन अधिक जटिल प्रदर्शन तर्क को लागू करने के लिए - उदाहरण के लिए, आलसी प्रसंस्करण केवल तभी प्राप्त होता है जब सेल वास्तव में प्रस्तुत किया जाता है।
जानकारी के लिए धन्यवाद, मैंने अब सूची डेटा को अपने डेटा-ऑब्जेक्ट्स में से एक को पकड़ने के लिए संशोधित किया है और SetCellDataFunc के माध्यम से CellRenderer सेट किया है। क्या आप सेल रेन्डरर के स्टोर और गुणों के गुणों के बीच "मैपिंग" का उपयोग करने पर विस्तार कर सकते हैं? – Nils
ठीक है, कुछ उदाहरण जोड़े गए :) –
धन्यवाद, यह बहुत मदद करता है! – Nils