[英]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.