2011-10-06 56 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> 

Trong mã trên, tôi muốn hiển thị tên thuộc tính được nhóm. Ví dụ: Giới tính -> Boy; Giới tính -> Girl.Làm cách nào để hiển thị tên thuộc tính trong tiêu đề nhóm trong wpf

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

tôi cần cung cấp gì cho ???????????? trong xaml ở trên?

Ngoài ra, vui lòng cho tôi biết nếu có bất kỳ cuốn sách hay liên kết nào giải thích chi tiết nội bộ của nhóm trong ListCollectionView.

Trả lời

1

DataContext phải là một phiên bản CollectionViewGroup, sẽ có thuộc tính Name được đặt thành "nhóm" (nghĩa là giá trị của Giới tính). Nhưng không có sự tương quan giữa CollectionViewGroup và thuộc tính của nó. Về mặt kỹ thuật, tài sản có thể có nhiều cấp độ sâu.

Cách thay thế tốt duy nhất là sắp xếp trên một thuộc tính khác có tất cả thông tin bạn cần. Thuộc tính CollectionViewGroup.Name là một đối tượng, không phải là một chuỗi. Vì vậy, bạn có thể làm điều gì đó như:

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; } 
    } 

} 

Và sau đó truy cập vào nó như thế này:

<!-- 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> 

Đó là ý tưởng cơ bản, nhưng bạn có thể làm GenderGroup chung chung hơn. Vì vậy, thay vì mã hóa cứng "Gender", bạn có thể truyền nó có tham số.

+0

Cảm ơn bạn CodeNaked cho thư trả lời ... Điều đó có nghĩa là tôi không thể hiển thị tên thuộc tính trong tiêu đề bằng bất kỳ cách thẳng nào ...? –

+0

@SudhakarSingh - Tôi thêm công việc duy nhất xung quanh tôi có thể nghĩ đến câu trả lời của tôi. – CodeNaked

Các vấn đề liên quan