我有一个绑定到CollectionViewSource的ItemControl。 ItemControl项目被分组,然后呈现在datatemplate中。 我想要实现的是这样的:
-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的标题是空白的。似乎绑定不起作用。 有人可以帮助我......
先谢谢。
答案 0 :(得分:1)
这是因为你绑定到错误的字段。您需要绑定到group name,而不是绑定到您分组的字段。尝试这样的想法:
<GroupBox Header="{Binding Name}">
<ItemsPresenter />
</GroupBox>
每个组都是CollectionViewGroup
,它有自己的属性,可以在指定组头时使用。
答案 1 :(得分:0)
试试这样:
<GroupBox>
<GroupBox.Header>
<TextBlock Text="{Binding initial}"/>
</GroupBox.Header>
<ItemsPresenter />
</GroupBox>
或
<GroupBox>
<GroupBox.Header>
<TextBlock Text="{Binding}"/>
</GroupBox.Header>
<ItemsPresenter />
</GroupBox>
答案 2 :(得分:0)
对于像这样工作的绑定,应该实现接口INotifyCollectionChanged。 我建议您使用ObservableCollection而不是列表。
所以这段代码:
List<Movie> lst;
public List<Movie> listItem
{
get { return lst; }
set { lst = value; }
}
将成为:
ObservableCollection<Movie> listItem;