繁体   English   中英

如何从 XAML 中的 ListView 获取 selecteditem?

[英]How do I get selecteditem from ListView in XAML?

这可能是重复的。 但是我已经尝试了我能找到的所有方法,但我无法让它发挥作用。

为什么这不起作用? SelectedCourse 始终为空。 我已经测试了所有其他东西,它工作正常。 它只是获取问题所在的选定项目。

这是我的视图模型:

public Course SelectedCourse { get; set; }

public async Task CoursesListViewClick(object sender, ItemClickEventArgs e)
        {
            var students = await coursesDataAccess.GetCourseStudentsAsync(SelectedCourse.CourseID); //THIS IS NULL
            foreach (Student s in students)
                CourseStudents.Add(s);
        } 

这是我的 XAML 代码:

           <ListView Grid.Column="0"
                      x:Name="lvCourses"
                      IsItemClickEnabled="True"
                      DataContext="{x:Bind ViewModel}"
                      ItemsSource="{Binding Courses, Mode=OneWay}"
                      SelectedItem="{Binding SelectedCourse, Mode=TwoWay}"
                      ItemClick="{x:Bind ViewModel.CoursesListViewClick}"
                      Margin="10">
                <ListView.ItemTemplate>
                    <DataTemplate x:DataType="model:Course">
                        <StackPanel Height="250">
                            <TextBlock
                                FontSize="50"
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Text="{x:Bind Name}"
                                Style="{StaticResource TitleTextBlockStyle}"/>
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

为什么这不起作用? SelectedCourse 始终为空。

因为你已经绑定了SelectedItem属性和ItemClick事件,所以当你点击listViewItem时,它会先触发与ItemClick事件绑定的CoursesListViewClick方法,然后再触发SelectedCourse的setter方法来设置值。 所以在 CoursesListViewClick 方法中,SelectedCourse 还没有赋值,它始终为 null。

CoursesListViewClick 方法中的e.ClickedItem代表您点击的当前项目,您可以直接使用它进行操作。

public async Task CoursesListViewClick(object sender, ItemClickEventArgs e)
{
    Course selectedCourse = e.ClickedItem as Course;
    var students = await coursesDataAccess.GetCourseStudentsAsync(selectedCourse.CourseID); //THIS IS NULL
    foreach (Student s in students)
        CourseStudents.Add(s);
}

如果您使用: listView.ItemTapped += async (sender, e) => { e.Item; } listView.ItemTapped += async (sender, e) => { e.Item; }然后你可以操纵你要根据项目的不同ID做什么

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM