Как получить выбранный элемент из ListView в XAML? - PullRequest
0 голосов
/ 24 марта 2020

Это может быть дубликат. Но я перепробовал все, что смог найти, и не могу заставить его работать.

Почему это не работает? Выбранный курс всегда нулевой. Я проверил все остальное, и он отлично работает. Это просто получение выбранного предмета, который является проблемой.

Это моя ViewModel:

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>

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Почему это не работает? SelectedCourse всегда равен нулю.

Поскольку вы связали свойство SelectedItem и событие ItemClick, при нажатии на listViewItem он сначала вызовет метод CoursesListViewClick, который связан с событием ItemClick и затем запустите метод установки SelectedCourse, чтобы установить значение. Поэтому в методе CoursesListViewClick значение SelectedCourse не было присвоено, оно всегда равно нулю.

* e.ClickedItem из метода CoursesListViewClick представляет текущий элемент, который вы щелкнули, вы можете напрямую использовать его для работы.

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);
}
0 голосов
/ 24 марта 2020

если вы используете: listView.ItemTapped += async (sender, e) => { e.Item; }, вы можете манипулировать тем, что хотите сделать, в зависимости от идентификатора элемента

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...