समस्याएक डेटा ग्रिड
मैं एक WPF टूलकिट DataGrid
है, और मुझे कई पूर्व निर्धारित स्तंभ आदेश के बीच स्विच करने में सक्षम होना चाहते हैं में स्तंभ क्रम को नियंत्रित करने के बाइंडिंग का उपयोग करना। यह एक एमवीवीएम प्रोजेक्ट है, इसलिए कॉलम ऑर्डर ViewModel
में संग्रहीत हैं। समस्या यह है कि, DisplayIndex
संपत्ति के लिए मुझे काम करने के लिए बाइंडिंग नहीं मिल सकती है। कोई फर्क नहीं पड़ता कि मैं मिठाई विधि सहित क्या कोशिश, this Josh Smith tutorial में, मैं मिलता है:
हैडर 'आईडी' के साथ DataGridColumn के लिए DisplayIndex सीमा से बाहर है। डिस्प्ले इंडेक्स 0 से अधिक या बराबर होना चाहिए और कॉलम से कम होना चाहिए। गणना। पैरामीटर नाम: प्रदर्शन इंडेक्स। वास्तविक मूल्य -1 था।
क्या इसके लिए कोई कामकाज है?
मैं नीचे अपना परीक्षण कोड शामिल कर रहा हूं। यदि आपको इसके साथ कोई समस्या दिखाई देती है तो कृपया मुझे बताएं।
ViewModel कोड
public class MainViewModel
{
public List<Plan> Plans { get; set; }
public int IdDisplayIndex { get; set; }
public int NameDisplayIndex { get; set; }
public int DescriptionDisplayIndex { get; set; }
public MainViewModel()
{
Initialize();
}
private void Initialize()
{
IdDisplayIndex = 1;
NameDisplayIndex = 2;
DescriptionDisplayIndex = 0;
Plans = new List<Plan>
{
new Plan { Id = 1, Name = "Primary", Description = "Likely to work." },
new Plan { Id = 2, Name = "Plan B", Description = "Backup plan." },
new Plan { Id = 3, Name = "Plan C", Description = "Last resort." }
};
}
}
योजना कक्षा
public class Plan
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
विंडो कोड - इस का उपयोग करता है Josh Smith's DataContextSpy
<Window
x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
xmlns:mwc="http://schemas.microsoft.com/wpf/2008/toolkit"
Title="Main Window" Height="300" Width="300">
<Grid>
<mwc:DataGrid ItemsSource="{Binding Plans}" AutoGenerateColumns="False">
<mwc:DataGrid.Resources>
<local:DataContextSpy x:Key="spy" />
</mwc:DataGrid.Resources>
<mwc:DataGrid.Columns>
<mwc:DataGridTextColumn
Header="ID"
Binding="{Binding Id}"
DisplayIndex="{Binding Source={StaticResource spy}, Path=DataContext.IdDisplayIndex}" />
<mwc:DataGridTextColumn
Header="Name"
Binding="{Binding Name}"
DisplayIndex="{Binding Source={StaticResource spy}, Path=DataContext.NameDisplayIndex}" />
<mwc:DataGridTextColumn
Header="Description"
Binding="{Binding Description}"
DisplayIndex="{Binding Source={StaticResource spy}, Path=DataContext.DescriptionDisplayIndex}" />
</mwc:DataGrid.Columns>
</mwc:DataGrid>
</Grid>
</Window>
नोट: अगर मैं सिर्फ DisplayIndex
के लिए सादे नंबरों का उपयोग, सब कुछ ठीक काम करता है, तो समस्या बाइंडिंग के साथ निश्चित रूप से है।
अद्यतन 5/1/2010
मैं सिर्फ अपनी परियोजना पर एक छोटे से रखरखाव कर रहा था, और मैंने देखा है कि जब मैं यह भाग गया, समस्या मैं इस पोस्ट में चर्चा लौटा था। मुझे पता था कि आखिरी बार मैंने इसे चलाने के लिए काम किया था, इसलिए मैंने अंततः इस तथ्य को कम कर दिया कि मैंने डब्ल्यूपीएफ टूलकिट (फरवरी '10) का एक नया संस्करण स्थापित किया था। जब मैं जून 0 9 संस्करण में वापस आ गया, तो सब कुछ ठीक काम किया। तो, अब मैं कुछ कर रहा हूं जो मुझे पहले स्थान पर करना चाहिए था: मैं WPFToolkit.dll को शामिल करता हूं जो मेरे समाधान फ़ोल्डर में काम करता है और इसे संस्करण नियंत्रण में जांचता है। हालांकि, यह दुर्भाग्यपूर्ण है कि नए टूलकिट में ब्रेकिंग बदलाव है।
अच्छा यह दिलचस्प है। अगर मैं अपना टेस्ट ऐप चलाता हूं, तो आपका फिक्स पूरी तरह से काम करता है। मेरे असली ऐप में, प्रश्न में 'डेटाग्रिड' वास्तव में 'UserControl' में है, और किसी कारण से, यदि मैं 'DataContextSpy' लागू करता हूं (जिसे मैंने अभी तक तब तक नहीं किया है जब से यह मेरे परीक्षण ऐप के लिए विफल नहीं हुआ था) , यह तब भी काम करता है जब मैं 'प्रारंभिक कॉम्पोनेंट() 'पर कॉल स्थगित नहीं करता हूं। मुझे लगता है कि यह होना चाहिए क्योंकि मैं 'विंडो' करने के बजाय 'ContentControl' पर' सामग्री 'सेट कर रहा हूं। दिखाएं() '। किसी भी मामले में, मेरे लिए यह हल करने के लिए समय निकालने के लिए धन्यवाद (+1 और √)। – devuxer