Как получить выбранный элемент вложенного listview?

#wpf #listview #mvvm #nested

#wpf #listview #mvvm #вложенный

Вопрос:

у меня есть вложенный listview, я могу привязать выбранный элемент базового listview к моей viewmodel, но не выбранный элемент вложенного listview (в базовом listview) Я просто делаю: это мой listview:

       <ListView Height="155" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible"   dd:DragDrop.IsDragSource="True" 
  dd:DragDrop.IsDropTarget="False" Margin="24,506,280,169" Background="#CDC5CBC5"
                 dd:DragDrop.DropHandler="{Binding}" SelectedItem ="{Binding Path=SelectedCluster,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" ItemsSource="{Binding Path=Clusters,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" >
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="Titel" DisplayMemberBinding="{Binding Title}"/>
                        <GridViewColumn Header="Questions">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <ListView DataContext="{Binding}" ItemsSource="{Binding ExaminationQuestions}" SelectedItem="{Binding Path=SelectedExaminationQuestionInCluster,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}">
                                        <ListView.View>
                                            <GridView>
                                                <GridViewColumn Header="Description" DisplayMemberBinding="{Binding Question.Description}"/>


                                            </GridView>
                                        </ListView.View>
                                    </ListView>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
        </ListView>
  

Viewmodel:

 public ExaminationQuestion SelectedExaminationQuestionInCluster
        {
            get { return selectedExaminationQuestionInCluster; }
            set { selectedExaminationQuestionInCluster = value;
            OnPropertyChanged("SelectedExaminationQuestionInCluster");
            }
        }
  

Кто-нибудь, кто знает, что я делаю не так? Если я установлю точку останова для параметра selecteditem второго listview. Он просто игнорирует это..

Спасибо

Ответ №1:

Я предполагаю, что привязка, вероятно, неверна. В вашем внешнем ListView вы привязываетесь к «Кластерам». Ваш внутренний ListView, вероятно, пытается привязаться к «SelectedExaminationQuestionInCluster» в текущем кластере. Вы можете проверить, так ли это, используя snoop. Это ценный инструмент при отладке приложений WPF. Он выделит красным цветом поврежденные привязки и сообщит вам, что с ними не так.

Если вы хотите привязаться к «SelectedExaminationQuestionInCluster» в родительском DataContext, вы могли бы использовать этот синтаксис:

 SelectedItem="{Binding Path=DataContext.SelectedExaminationQuestionInCluster,
               ElementName=OuterListView}"
  

Конечно, вам придется присвоить внешнему ListView имя.

РЕДАКТИРОВАТЬ: Я только что понял, что это может не иметь смысла. Если у каждого кластера есть своя коллекция ExaminationQuestions, то у каждого кластера также должен быть SelectedExaminationQuestion. Родительский DataContext не должен иметь никакого представления о SelectedQuestion, если только он не является общим для всех кластеров.