मेरे पास एक सूची बॉक्स है जो हाल ही में आइटमों की एक विस्तृत सूची प्रदर्शित कर रहा था। मैं सूची में ListBoxItem होस्टिंग "चीज़" को पुनर्प्राप्त करने के लिए myList.ItemContainerGenerator.ConainerFromItem (चीज़) का उपयोग करने में सक्षम था।ItemContainerGenerator.ContainerFromItem समूहबद्ध सूची के साथ कैसे काम करता है?
इस हफ्ते मैंने ListBox को थोड़ा सा संशोधित किया है जिसमें संग्रहव्यूसोर्स है कि यह इसके आइटमों के लिए बाध्य करता है समूहिंग सक्षम है। अब ListBox के भीतर आइटम अच्छे शीर्षलेख के नीचे समूहित हैं।
हालांकि, ऐसा करने के बाद, ItemContainerGenerator.ContainerFromItem ने काम करना बंद कर दिया है - यह सूची बॉक्स में मुझे पता है कि आइटम के लिए भी शून्य वापस आती है। हेक - ContainerFromIndex (0) कई आइटमों के साथ सूची बॉक्स पॉप्युलेट होने पर भी शून्य वापस आ रहा है!
मैं लिस्टबॉक्स से एक सूची बॉक्स को कैसे प्राप्त करूं जो समूहबद्ध वस्तुओं को प्रदर्शित कर रहा है?
संपादित करें: यहां एक ट्रिम किए गए उदाहरण के लिए एक्सएएमएल और कोड-बैक है। यह एक NullReferenceException उठाता है क्योंकि ContainerFromIndex (1) सूची में चार आइटम होने के बावजूद शून्य लौट रहा है।
XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
Title="Window1">
<Window.Resources>
<XmlDataProvider x:Key="myTasks" XPath="Tasks/Task">
<x:XData>
<Tasks xmlns="">
<Task Name="Groceries" Type="Home"/>
<Task Name="Cleaning" Type="Home"/>
<Task Name="Coding" Type="Work"/>
<Task Name="Meetings" Type="Work"/>
</Tasks>
</x:XData>
</XmlDataProvider>
<CollectionViewSource x:Key="mySortedTasks" Source="{StaticResource myTasks}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="@Type" />
<scm:SortDescription PropertyName="@Name" />
</CollectionViewSource.SortDescriptions>
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="@Type" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
</Window.Resources>
<ListBox
x:Name="listBox1"
ItemsSource="{Binding Source={StaticResource mySortedTasks}}"
DisplayMemberPath="@Name"
>
<ListBox.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListBox.GroupStyle>
</ListBox>
</Window>
सीएस:
public Window1()
{
InitializeComponent();
listBox1.ItemContainerGenerator.StatusChanged += ItemContainerGenerator_StatusChanged;
}
void ItemContainerGenerator_StatusChanged(object sender, EventArgs e)
{
if (listBox1.ItemContainerGenerator.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
{
listBox1.ItemContainerGenerator.StatusChanged -= ItemContainerGenerator_StatusChanged;
var i = listBox1.ItemContainerGenerator.ContainerFromIndex(1) as ListBoxItem;
// select and keyboard-focus the second item
i.IsSelected = true;
i.Focus();
}
}
तुम क्या कर रहे देना कंटेनर के साथ? क्या आप संभवतः पिछले कोड के काम पर क्या संभवतः काम कर सकते हैं? कंटेनर प्राप्त करने के कुछ तरीके हैं ... यह सिर्फ इस बात पर निर्भर करता है कि आप इसके साथ क्या करना चाहते हैं? – rudigrobler