मुझे एक ही समस्या थी क्योंकि उपयोगकर्ता रनटाइम पर ग्रिड के कॉलम को परिभाषित करने में सक्षम था।
मैंने ग्राम डेटाग्रिड युक्त एक नियंत्रण लिखा और ग्रिड (यानी एक डेटा तालिका) के लिए मॉडल को बांधने के लिए डेटासोर्स निर्भरता संपत्ति का खुलासा किया।
हर बार स्रोत बदल (आप और PropertyChanged के लिए घटना श्रोताओं ग्रिड FieldLayoutInitializing घटना जोड़ सकते हैं) ग्रिड गतिशील अपने डेटा स्रोत साफ करने और रीसेट करके फिर से प्रस्तुत किया गया है:
private void ReRenderGrid()
{
XamDataGrid.FieldLayouts.Clear();
XamDataGrid.ClearValue(DataPresenterBase.DataSourceProperty);
XamDataGrid.DataSource = DataSource.Data.DefaultView;
}
कॉलम के लिए कॉन्फ़िगर कर रहे रहे हैं
XamDataGrid.FieldLayoutInitializing += LayoutInitializing;
हैंडलर:
निम्न इवेंट जो ग्रिड डेटा स्रोत के बाद xamdatagrid द्वारा उठाया जाता है पर एक ईवेंट हैंडलर द्वारा रीसेट किया जाता है
private void LayoutInitializing(object sender, FieldLayoutInitializingEventArgs e)
{
const string deletebuttonstyle = "DeleteButtonStyle";
const string requiredinputvalue = "RequiredInputValue";
const string optionalinputvalue = "OptionalInputValue";
const string outputvalue = "OutputValue";
var fieldLayout = e.FieldLayout;
fieldLayout.Fields.Clear();
AddFields(DataSource.InColumns, requiredinputvalue, fieldLayout);
AddSplitter(fieldLayout);
AddFields(DataSource.OptionalInColumns, optionalinputvalue, fieldLayout);
AddSplitter(fieldLayout);
AddFields(DataSource.OutColumns, outputvalue, fieldLayout);
AddUnboundField(fieldLayout, string.Empty, GetStyle(deletebuttonstyle));
}
मेरे मामले में डेटास्रोत में उपयोगकर्ता द्वारा कॉन्फ़िगर किए गए सभी कॉलम शामिल थे। AddFields प्रत्येक सूची प्रवेश के लिए इस प्रणाली को बुलाती है:
private void AddField(string name, Style style, FieldLayout fieldLayout)
{
var field = new Field {Name = name};
field.Settings.LabelPresenterStyle = style;
field.Settings.CellValuePresenterStyle = GetStyle("StandardCellValueStyle");
fieldLayout.Fields.Add(field);
}
AddSplitter और AddUnboundField इसी तरह से लागू किया जाता है।
आपकी महान प्रतिक्रिया किरेन के लिए धन्यवाद। हालांकि मुझे आपके मॉडल के साथ तीन समस्याएं मिलीं। सबसे पहले ViewModel की रोडाटा संपत्ति है, जो अपने स्वयं के सीटीआर में 'यह' गुजर रही है। हालांकि वास्तविक ctor कुछ प्रकार के कुछ RowViewModel स्वीकार करता है जो पिछले 'इस' के प्रकार के साथ संगत नहीं है। – Houman
दूसरी समस्या यह है कि आप एक कॉलम को बांधते हैं। XamDataGrid के भीतर आप आमतौर पर पूरे xamdatagrid को बाइंडिंगलिस्ट संग्रह में बाध्य करेंगे, एक पंक्ति उन पंक्तियों को स्वत: उत्पन्न करेगी। जब तक आप मैन्युअल रूप से कॉलम नहीं बनाते, तो आप वास्तव में प्रत्येक कॉलम से अलग-अलग बाध्य नहीं कर पाएंगे। –
Houman
तीसरी समस्या निम्न है, मैं timeperiod x से y के लिए गतिशील रूप से कॉलम नामों को स्वत: उत्पन्न कर सकता हूं, ताकि जैसा कि आपने सुझाव दिया था, मैं उन्हें इंडेक्सर में उपयोग कर सकता हूं। लेकिन बाध्यकारी कैंट अभी भी स्थिर xaml कोड पर हो सकता है। परिवर्तनीय तरीके से कॉलम नामों का उपयोग करने के लिए इसे xaml दृश्य के पीछे कोड में होना चाहिए। जब तक मैं यहाँ कुछ याद नहीं कर रहा हूं ... धन्यवाद – Houman