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