1

我有一个绑定到 CollectionViewSource 的 ItemControl。ItemControl 项目被分组然后呈现在数据模板中。我想要实现的是这样的:

-A--------------
| Aa...        |
| Aaaa...      |
----------------

-B--------------
| Bb...        |
| Bbb...       |
----------------

这是我的代码:

XAML

<CollectionViewSource x:Key="itembyAlpha" Source="{Binding listItem}">
    <CollectionViewSource.GroupDescriptions>
        <PropertyGroupDescription PropertyName="initial" />
    </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

    <ItemsControl ItemsSource="{Binding Source={StaticResource itembyAlpha}}">

        <!--GroupStyle-->
        <ItemsControl.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <GroupBox Header="{Binding initial}">
                                        <ItemsPresenter />
                                    </GroupBox>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
        </ItemsControl.GroupStyle>

        <!--Item Template-->
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding title}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>            
    </ItemsControl>

C#

public class Movie
{
   public string id { get; set; }
   public string title { get; set; }
   public string initial { get; set; }
}

List<Movie> lst;
public List<Movie> listItem
{
   get { return lst; }
   set { lst = value; }
}

我的问题是,这部分代码似乎不起作用:

<GroupBox Header="{Binding initial}">
   <ItemsPresenter />
</GroupBox>

当我运行我的程序时,结果是这样的:

- --------------
| Aa...        |
| Aaaa...      |
----------------

- --------------
| Bb...        |
| Bbb...       |
----------------

GroupBox 的标题是空白的。似乎绑定不起作用。有人可以帮我吗...

之前谢谢。

4

3 回答 3

1

这是因为您绑定到错误的字段。您需要绑定到组名,而不是绑定到您分组的字段。尝试这样的想法:

<GroupBox Header="{Binding Name}">
    <ItemsPresenter />
</GroupBox>

每个组都是一个CollectionViewGroup,并且它有自己的属性,您可以在指定组标题时使用这些属性。

于 2013-07-10T11:46:31.203 回答
0

为了让绑定像这样工作,应该实现接口 INotifyCollectionChanged。我建议您使用ObservableCollection而不是 List。

所以这段代码:

List<Movie> lst;
public List<Movie> listItem
{
   get { return lst; }
   set { lst = value; }
}

会变成:

ObservableCollection<Movie> listItem;
于 2013-07-10T12:10:10.170 回答
0

试试这样:

<GroupBox>
   <GroupBox.Header>
        <TextBlock Text="{Binding initial}"/>
   </GroupBox.Header>
        <ItemsPresenter />
   </GroupBox>

或者

    <GroupBox>
   <GroupBox.Header>
        <TextBlock Text="{Binding}"/>
   </GroupBox.Header>
        <ItemsPresenter />
   </GroupBox>
于 2013-07-10T11:40:52.693 回答