UWP C# Toggleswitch внутри Listview — как получить элементы строки при нажатии на Toggleswitch

Итак, у меня есть этот Listview с Toggleswitch. Что я хочу сделать, так это запустить событие, такое как ItemClick="Event_Overview_Teams_ItemClick", но с Toggled="TeamPresent_Toggled", и работать с такими элементами, как TeamID строки, на которую нажали.

<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>

заранее большое спасибо


person Chris    schedule 17.02.2020    source источник


Ответы (1)


Когда вы инициируете событие TeamPresent_Toggled, вы можете получить модель представления, связанную с текущим элементом, получив DataContext переключателя ToggleSwitch. Затем измените свойство (например, TeamID) из полученной вами модели представления.

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