2011-10-06 18 views
5
<!-- GroupHeaderStyle --> 
<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type GroupItem}"> 
       <Expander IsExpanded="False" Margin="15,0,0,0"> 
        <Expander.Header> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock Text="{Binding ????????????}"/> 
          <TextBlock Text="-->"/> 
          <TextBlock Text="{Binding Name}"/> 
         </StackPanel> 
        </Expander.Header> 
        <ItemsPresenter /> 
       </Expander> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

में उपरोक्त कोड मैं संपत्ति नाम है जिसके द्वारा यह वर्गीकृत किया जाता है प्रदर्शित करना चाहते हैं में प्रदर्शित करते हैं। ईजी। लिंग -> लड़का; लिंग -> लड़की।मैं कैसे संपत्ति नाम समूह शीर्ष लेख में WPF

public class Test 
{ 
    string gender; 
    public string Gender 
    { 
     get { return gender; } 
     set { gender = value; } 
    } 
} 

मुझे क्या करना चाहिए ???????????? उपरोक्त xaml में?

इसके अलावा, मुझे पता है कि क्या कोई अच्छी किताब या लिंक जो ListCollectionView में समूहीकरण के आंतरिक विवरण बताते है तो कृपया।

उत्तर

1

DataContextCollectionViewGroup का एक उदाहरण होना चाहिए, जिसमें यह Name संपत्ति "समूह" (यानी लिंग का मूल्य) पर सेट होगी। लेकिन CollectionViewGroup के बीच कोई सहसंबंध नहीं है और यह किस संपत्ति से आया है। तकनीकी रूप से, संपत्ति कई स्तरों गहरे हो सकती है।

एकमात्र अच्छा विकल्प किसी अन्य संपत्ति को सॉर्ट करना है जिसमें आपकी आवश्यक सारी जानकारी है। CollectionViewGroup.Name संपत्ति एक वस्तु है, स्ट्रिंग नहीं। तो अगर आप की तरह कुछ कर सकता है:

public class GenderGroup { 

    public GenderGroup(string gender) { 
     this.Gender = gender; 
    } 

    public string Gender { get; private set; } 
    public string Title { 
     get { 
      return "Gender"; 
     } 
    } 

    public override bool Equals(object obj) { 
     var other = obj as GenderGroup; 
     return (other != null && string.Equals(this.Gender, other.Gender)); 
    } 
} 

public class Test { 
    string gender; 
    GenderGroup genderGroup = new GenderGroup("none"); 

    public string Gender { 
     get { return gender; } 
     set { 
      gender = value; 
      genderGroup = new GenderGroup(gender); 
     } 
    } 

    public GenderGroup GenderGroup { 
     get { return genderGroup; } 
    } 

} 

और फिर इस तरह इसे उपयोग:

<!-- GroupHeaderStyle --> 
<Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type GroupItem}"> 
       <Expander IsExpanded="False" Margin="15,0,0,0"> 
        <Expander.Header> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock Text="{Binding Name.Title}"/> 
          <TextBlock Text="-->"/> 
          <TextBlock Text="{Binding Name.Gender}"/> 
         </StackPanel> 
        </Expander.Header> 
        <ItemsPresenter /> 
       </Expander> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

मूल विचार है कि है, लेकिन आप GenderGroup अधिक सामान्य बना सकता है। तो हार्ड-कोडिंग "Gender" के बजाय आप पास कर सकते हैं जिसमें पैरामीटर है।

+0

धन्यवाद उत्तर के लिए CodeNaked ... क्या इसका मतलब है कि मैं किसी भी सीधे आगे के रास्ते में हेडर में प्रदर्शित संपत्ति का नाम नहीं प्राप्त कर सकता ...? –

+0

@ सुधाकरसिंह - मैंने एकमात्र काम जोड़ा जो मैं अपने उत्तर के बारे में सोच सकता हूं। – CodeNaked

संबंधित मुद्दे