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>

上記のコードでは、グループ化されたプロパティ名を表示したいと考えています。例: 性別 --> 男の子; 性別→女の子。

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

何を用意すればいいですか???????????? 上記のxamlで?

また、グループ化の内部の詳細を説明している良い本やリンクがあれば教えてくださいListCollectionView

4

1 に答える 1

2

これはCollectionViewGroupDataContextのインスタンスである必要があり、そのプロパティは「グループ」(つまり、Gender の値) に設定されます。ただし、CollectionViewGroup とそれが由来するプロパティとの間に相関関係はありません。技術的には、プロパティは複数レベルの深さになる可能性があります。Name

唯一の適切な方法は、必要な情報がすべて含まれている別のプロパティを並べ替えることです。プロパティは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"する代わりに、パラメーターを持つパスを渡すことができます。

于 2011-10-06T17:26:32.303 に答える