协作中ListViewItem中的UWP访问控件

时间:2019-04-28 22:52:03

标签: c# windows xaml uwp

我有一个带有两个用于对象和标题的DataTemplate的ListView。 ListView中的项目绑定到如下所示的CollectionViewSource:

<CollectionViewSource
            x:Name="groupedItemsViewSource3"
            Source="{Binding Groups2}"
            IsSourceGrouped="true"
            ItemsPath="Items"
            d:Source="{Binding Groups, Source={d:DesignData Source=/DataModel/SampleData.json, Type=data:SampleDataSource}}"/>

我可以设法获取ListViewItem,但无法控制其子控件。 我的ListView看起来像这样:

<ListView
                                            Margin="0,40,0,0"
                                            Width="580"
                                            HorizontalAlignment="Right"
                                            x:Name="itemGridView1"
                                            AutomationProperties.AutomationId="ItemGridView"
                                            AutomationProperties.Name="Grouped Items"
                                            ItemsSource="{Binding Source={StaticResource groupedItemsViewSource2}}"
                                            SelectionMode="None"
                                            IsSwipeEnabled="false"
                                            IsItemClickEnabled="True"
                                            ItemClick="ItemView_ItemClick" Background="White">
                                            <ListView.ItemTemplate>
                                                <DataTemplate>
                                                    <Grid HorizontalAlignment="Left" Background="LightGray" Width="2500" Height="25">
                                                        <Border HorizontalAlignment="Stretch" BorderThickness="0,0,0,1" BorderBrush="Black">
                                                            <StackPanel Orientation="Horizontal">
                                                                <StackPanel Orientation="Horizontal">
                                                                    <TextBlock Text="{Binding Time}" Margin="10,0,0,0" Width="50" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="NoWrap" />
                                                                    <TextBlock Text="{Binding LiveTime}" Foreground="{Binding LiveTimeBGColor}" Margin="10,0,0,0" Width="40" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="NoWrap" />
                                                                    <TextBlock Text="{Binding TeamOne}" Margin="0,0,10,0" HorizontalTextAlignment="Right" Width="150" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="NoWrap" />
                                                                    <Border Background="DarkGray" Width="35" Margin="0,0,2,0" Padding="15,0,0,0">
                                                                    <TextBlock Text="{Binding ScoreTeamOne}"  Width="30" Foreground="White" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="NoWrap" />
                                                                    </Border>
                                                                    <Border Background="DarkGray" Width="35" Padding="15,0,0,0" Margin="2,0,0,0">
                                                                    <TextBlock Text="{Binding ScoreTeamTwo}" Foreground="White" Width="30" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="NoWrap" />
                                                                    </Border>
                                                                    <TextBlock Text="{Binding TeamTwo}" Margin="10,0,0,0" HorizontalAlignment="Left" Width="150" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="NoWrap" /> 
                                                                </StackPanel>
                                                            </StackPanel>
                                                        </Border>
                                                    </Grid>
                                                </DataTemplate>
                                            </ListView.ItemTemplate>

                                            <ListView.GroupStyle>
                                                <GroupStyle>
                                                    <GroupStyle.HeaderTemplate>
                                                        <DataTemplate>
                                                            <Grid Margin="0,0,0,2" Width="2500" Background="{Binding HeaderLiveBGColor}">
                                                                <Button Foreground="{ThemeResource ApplicationHeaderForegroundThemeBrush}"
                                                                AutomationProperties.Name="Group Title"
                                                                Click="Header_Click"
                                                                Style="{StaticResource TextBlockButtonStyle}" Width="2500">
                                                                    <StackPanel Orientation="Horizontal" Width="2500">
                                                                        <TextBlock Text="{Binding LeagueTitle}" Margin="10,0,0,0" Width="441.9" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="NoWrap" />
                                                                    </StackPanel>
                                                                </Button>
                                                            </Grid>
                                                        </DataTemplate>
                                                    </GroupStyle.HeaderTemplate>
                                                </GroupStyle>
                                            </ListView.GroupStyle>
                                            <ListView.ItemsPanel>
                                                <ItemsPanelTemplate>
                                                    <ItemsWrapGrid GroupPadding="0,0,20,0" Orientation="Horizontal"/>
                                                </ItemsPanelTemplate>
                                            </ListView.ItemsPanel>
                                        </ListView>

有什么主意,我该如何检查是否单击了权限子控件? 我最终要实现的是基于被单击的ListViewItem控件的单击处理。

1 个答案:

答案 0 :(得分:1)

  

要从ListViewItem中获取被单击的项目

如果添加断点来调试代码,您可能会知道ClickedItem类对象中有一个ItemClickEventArgsClickedItem应该是您想要的。

另一种方法是在SelectedItem上使用 TwoWay 绑定。

两种方法都包含在下面的代码示例中:

<Page.Resources>
    <CollectionViewSource
        x:Name="groupedItemsViewSource3"
        Source="{Binding Groups2}"
        IsSourceGrouped="true"
        ItemsPath="Items" />
</Page.Resources>
<Grid>
    <ListView
                                        Margin="0,40,0,0"
                                        Width="580"
                                        HorizontalAlignment="Right"
                                        x:Name="itemGridView1"
                                        AutomationProperties.AutomationId="ItemGridView"
                                        AutomationProperties.Name="Grouped Items"
                                        ItemsSource="{Binding Source={StaticResource groupedItemsViewSource3}}"
                                        SelectedItem="{Binding SelectedSong,Mode=TwoWay}"
                                        SelectionMode="Single"
                                        IsSwipeEnabled="false"
                                        IsItemClickEnabled="True"

                                        ItemClick="ItemGridView_ItemClick" Background="White">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid HorizontalAlignment="Left" Background="LightGray" Width="2500" Height="25">
                    <Border HorizontalAlignment="Stretch" BorderThickness="0,0,0,1" BorderBrush="Black">
                        <StackPanel Orientation="Horizontal">
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding Title}" Margin="10,0,0,0" Width="50" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="NoWrap" />
                            </StackPanel>
                        </StackPanel>
                    </Border>
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>

        <ListView.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <Grid Margin="0,0,0,2" Width="2500" Background="{Binding HeaderLiveBGColor}">
                            <Button Foreground="{ThemeResource ApplicationHeaderForegroundThemeBrush}"
                                                            AutomationProperties.Name="Group Title"

                                                            Style="{StaticResource TextBlockButtonStyle}" Width="2500">
                                <StackPanel Orientation="Horizontal" Width="2500">
                                    <TextBlock Text="{Binding Key}" Margin="10,0,0,0" Width="441.9" Style="{StaticResource BodyTextBlockStyle}" TextWrapping="NoWrap" />
                                </StackPanel>
                            </Button>
                        </Grid>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ListView.GroupStyle>
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <ItemsWrapGrid GroupPadding="0,0,20,0" Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>
</Grid>
public sealed partial class MainPage : Page
{
    public ObservableCollection<SongGroup> Groups2 { get; set; }

    private Song _SelectedSong;

    public Song SelectedSong
    {
        get { return _SelectedSong; }
        set
        {
            _SelectedSong = value;
        }
    }

    public MainPage()
    {
        this.InitializeComponent();
        Groups2 = GenerateData();
        this.DataContext = this;
    }

    private ObservableCollection<SongGroup> GenerateData()
    {
        ObservableCollection<SongGroup> songGroups = new ObservableCollection<SongGroup>();

        ObservableCollection<Song> songs = new ObservableCollection<Song>();
        songs.Add(new Song() { Title = "Song1" });
        songs.Add(new Song() { Title = "Song2" });

        songGroups.Add(new SongGroup() { Key = "A", Items = songs });

        ObservableCollection<Song> songs2 = new ObservableCollection<Song>();
        songs2.Add(new Song() { Title = "Song2_1" });
        songs2.Add(new Song() { Title = "Song2_2" });
        songGroups.Add(new SongGroup() { Key = "B", Items = songs2 });

        return songGroups;
    }

    private void ItemGridView_ItemClick(object sender, ItemClickEventArgs e)
    {
        var song = e.ClickedItem;
    }
}

public class Song
{
    public string Title { get; set; }
}

public class SongGroup
{
    public string Key { get; set; }

    public ObservableCollection<Song> Items { get; set; }
}