Search code examples
c#listviewuwptoggleswitch

UWP C# Toggleswitch inside Listview - How to get items of Row when clicked on Toggleswitch


So i'm having this Listview with on Toggleswitch. What i want is to do is to fire an event like ItemClick="Event_Overview_Teams_ItemClick" but with Toggled="TeamPresent_Toggled" and work on with the items like TeamID of the clicked row.

<ListView x:Name="Event_Overview_Teams" HorizontalAlignment="Center" Width="1787" Margin="0,48,0,10" IsItemClickEnabled="True" ItemClick="Event_Overview_Teams_ItemClick" SelectionMode="None">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <Grid Width="900">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="*" />
                                    </Grid.ColumnDefinitions>
                                    <TextBlock x:Name="TeamName" Grid.Column="0" Text="{Binding TeamName}" TextWrapping="Wrap" />
                                    <TextBlock x:Name="TeamID"   Grid.Column="1" Text="{Binding TeamID}" TextWrapping="Wrap" />
                                    <TextBlock x:Name="TeamNumber" Grid.Column="2" Text="{Binding TeamNumber}" TextWrapping="Wrap" />
                                    <TextBlock x:Name="TeamClass" Grid.Column="3" Text="{Binding TeamClass}" TextWrapping="Wrap" />
                                    <TextBlock x:Name="DeliverTime" Grid.Column="4" Text="{Binding DeliverTime}" TextWrapping="Wrap" />
                                    <!--<TextBlock x:Name="TeamPresent" Grid.Column="5" Text="{Binding TeamPresent}" TextWrapping="Wrap" />-->
                                    <ToggleSwitch x:Name="TeamPresent" Grid.Column="5" IsOn="{Binding TeamPresent}" Toggled="TeamPresent_Toggled"/>
                                </Grid>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>

Thank you very much in advance


Solution

  • When you trigger the TeamPresent_Toggled event, you can get the viewmodel which bound with the current item by getting the DataContext of the ToggleSwitch. Then changing the property(e.g. TeamID) from the viewmodel you get.

    private void TeamPresent_Toggled(object sender, RoutedEventArgs e)
    {
        var toggle = (ToggleSwitch)sender;
        var dataContext = toggle.DataContext;
        MyViewModel dataItem = (MyViewModel)dataContext;
        dataItem.TeamID = "MyNewTeamId";
        ......
    }