मैं एक TreeView
कि इस तरह दिखता है:संग्रह दृश्य समूह समूह के साथ एक बेवकूफ XAML TreeView क्या है?
<TreeView Grid.Row="1" x:Name="InspectionResultsTreeView"
ItemsSource="{Binding Source={StaticResource InspectionTypeGroupViewSource}, Path=Groups}"
ItemTemplate="{StaticResource InspectionTypeGroupsTemplate}">
</TreeView>
ItemsSource
एक बंद संसाधन है कि InspectionTypeGroupViewSource
के नाम से भी जाना जाता है:
<CollectionViewSource x:Key="InspectionTypeGroupViewSource" Source="{Binding Results}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="Inspection.InspectionType" />
<PropertyGroupDescription PropertyName="Inspection" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
इस छोटी बात की भूमिका ViewModel के लेने के लिए है Results
संपत्ति:
private ObservableCollection<ICodeInspectionResult> _results;
public ObservableCollection<ICodeInspectionResult> Results
{
get { return _results; }
set { _results = value; OnPropertyChanged(); }
}
... और इसे दो स्तरों पर समूहित करें - पहले InspectionType
द्वारा, फिर Inspection
द्वारा - परिणाम निरीक्षण प्रकार, निरीक्षण, और फिर व्यक्तिगत निरीक्षण परिणामों के साथ एक 3-स्तर पदानुक्रम है। इस बिंदु पर एक स्क्रीनशॉट visualizing मदद कर सकता है मुझे लगता है कि:
तो, InspectionResultsTreeView
की ItemTemplate
, एक और बंद संसाधन है InspectionTypeGroupsTemplate
के नाम से - कि बोल्ड "निरीक्षण प्रकार" आइटम है:
<HierarchicalDataTemplate x:Key="InspectionTypeGroupsTemplate"
DataType="{x:Type CollectionViewGroup}"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource InspectionGroupsTemplate}">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center"
Text="{Binding Name}"
FontWeight="Bold"
TextWrapping="NoWrap"/>
<TextBlock Margin="4,0,4,0"
VerticalAlignment="Center"
Text="{Binding ItemCount, StringFormat=({0})}"
TextWrapping="NoWrap"/>
</StackPanel>
</HierarchicalDataTemplate>
और उस टेम्पलेट के ItemTemplate
एक InspectionGroupsTemplate
है - कि व्यक्तिगत निरीक्षण है, "गंभीरता" माउस के साथ:
<HierarchicalDataTemplate x:Key="InspectionGroupsTemplate"
DataType="{x:Type CollectionViewGroup}"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource InspectionResultTemplate}">
<StackPanel Orientation="Horizontal">
<Image Style="{StaticResource IconStyle}"
Source="{Binding Name, Converter={StaticResource InspectionIconConverter}}"
VerticalAlignment="Center" />
<TextBlock Margin="4"
VerticalAlignment="Center"
Text="{Binding Name, Converter={StaticResource InspectionDescriptionConverter}}"
TextWrapping="NoWrap"/>
<TextBlock Margin="0,4,0,4"
VerticalAlignment="Center"
Text="{Binding ItemCount, StringFormat=({0})}"
TextWrapping="NoWrap"/>
</StackPanel>
</HierarchicalDataTemplate>
अन्त में, इस समूह का ItemTemplate
एक InspectionResultTemplate
जो प्रत्येक व्यक्ति निरीक्षण परिणाम के लिए है,:
<DataTemplate x:Key="InspectionResultTemplate"
DataType="{x:Type inspections:ICodeInspectionResult}">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center"
Margin="4"
Text="{Binding Name}"
TextWrapping="NoWrap"/>
</StackPanel>
</DataTemplate>
ICodeInspectionResult
इंटरफ़ेस एक string Name
संपत्ति है कि मैं यहाँ का उपयोग कर रहा है; यह Name
Name
से अलग है जिसका उपयोग समूह स्तरों में किया जाता है, जहां यह object CollectionViewGroup.Name
है - उस Name
का अंतर्निहित प्रकार समूहकरण का है, इसलिए स्तर 1 InspectionType
है, और स्तर 2 Inspection
है।
समस्या यह है कि मैं इस कनवर्टर्स का उपयोग कर रहा हूं, मुझे विश्वास है कि मुझे यह object Name
रूपांतरित करने के लिए और सदस्यों को एक्सेस करने की आवश्यकता है, जिन्हें मैं एक्सेस और प्रदर्शित करने की आवश्यकता है ... लेकिन फिर, मुझे संख्या प्रदर्शित करने की आवश्यकता है प्रत्येक समूह में आइटम DataType
CollectionViewGroup
होना चाहिए ... सही?
मैं इसे प्रदर्शित करने की आवश्यकता वाले सभी चीज़ों के लिए कनवर्टर का उपयोग किए बिना कैसे कर सकता हूं? यह कैसे किया जाना चाहिए किया जाना है? प्रत्येक TreeView
/CollectionViewGroup
ट्यूटोरियल जो मुझे मिल सकता है वह एक छोटा कार्यान्वयन था।