我正在尝试ToggleButton在我的CollectionViewGroup中找到一个关联,我的xaml结构如下:
 <UserControl.Resources>
    <CollectionViewSource Source="{Binding Matches}" x:Key="GroupedItems">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="MatchNation" />
            <PropertyGroupDescription PropertyName="MatchLeague" />
        </CollectionViewSource.GroupDescriptions>
</UserControl.Resources>
你怎么看我有一个CollectionViewGroup过滤ObservableCollection绑定Matches的Nation和League.
为此,我声明了一个ListView有两个GroupStyle,一个用于过滤Country,另一个用于League,在这段代码中我只添加了第二个GroupStyle(包含ToggleButton):
<ListView ItemsSource="{Binding Source={StaticResource GroupedItems}}">
    <!-- this is the second group style -->
    <ListView.GroupStyle>
         <GroupStyle>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}" >
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Expander IsExpanded="True" Background="#4F4F4F">
                                    <Expander.Header>
                                        <DockPanel Height="16.5">
                                            <TextBlock Text="{Binding Name}" FontWeight="Bold" Foreground="White" FontSize="11.5" VerticalAlignment="Bottom" />
                                            <ToggleButton Checked="{Binding IsFavourite}" HorizontalAlignment="Right"/>
                                        </DockPanel>
                                    </Expander.Header>
                                    <ItemsPresenter />
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>
    </ListView.GroupStyle>
</ListView>
那么,你如何在第二组样式中看到(Nation -> League)我有一个ToggleButton.
现在GroupStyle将根据可用的项目重复ObservableCollection,例如:
|England
    |Premier League
     1. item  
     2. item 
     3. item 
|Afghanistan
     |Afghan Premier League
     1. item 
     2. item 
这是该组织,现在想象的Premier League中England和Afghan Premier League的Afghanistan存在ToggleButton,我已经插在右边,我需要得到所有的ToggleButtons每一Group提供的名单上.我试过这个:
var playingListSource = (ListCollectionView).Playing.Items.SourceCollection;
foreach (var gp in playingListSource.Groups)
{
       var rootGroup = (CollectionViewGroup)gp; //Convert the nested group
       var parentGroup = rootGroup.Items;
}
基本上我提取列表的组并试图在nester组上找到ToggleButton,但我找不到它.有人可以帮帮我吗?
首先,如果我们命名ToggleButton以便以后可以使用该ControlTemplate.FindName方法,事情会容易得多。所以这是ToggleButton:
<ToggleButton x:Name="PART_ToggleButton"
              Checked="{Binding IsFavourite}"
              HorizontalAlignment="Right" />
我们现在需要的是获得模板化容器(一个GroupItem控件)。为此我们可以使用该ListView.ItemContainerGenerator.ContainerFromItem方法。
知道这里有一段代码应该检索ToggleButton有问题的内容:
//we assume listView is a reference to the ListView
var playingListSource = (ListCollectionView)listView.ItemsSource;
//first we iterate over the top-level groups
foreach (CollectionViewGroup nationGroup in playingListSource.Groups)
{
    //second-level groups are items of their parents
    foreach (CollectionViewGroup leagueGroup in nationGroup.Items)
    {
        //first we retrieve the GroupItem control associated with current second-level group
        var container = listView.ItemContainerGenerator.ContainerFromItem(leagueGroup) as GroupItem;
        //then we find the named ToggleButton inside the template
        var toggleButton = container.Template.FindName("PART_ToggleButton", container) as ToggleButton;
        //at this point we have a reference to the ToggleButton
    }
}
| 归档时间: | 
 | 
| 查看次数: | 212 次 | 
| 最近记录: |