如何获取嵌套listview的选定项?

时间:2011-04-20 12:04:08

标签: wpf listview mvvm nested

我有一个嵌套的列表视图,我可以将基本列表视图的选定项目绑定到我的viewmodel,但不能将我所选择的嵌套列表视图项目(在基本列表视图中)绑定到: 这是我的列表视图:

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

视图模型:

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

有谁知道我做错了什么?如果我设置第二个列表视图的selecteditem的setter的断点。他只是忽略了......

由于

1 个答案:

答案 0 :(得分:2)

我的猜测是绑定可能不正确。在外部ListView中,绑定到“Clusters”。您的内部ListView可能正在尝试绑定到当前群集上的“SelectedExaminationQuestionInCluster” 。您可以使用snoop查看是否是这种情况。在调试WPF应用程序时,它是一个有价值的工具。它会以红色突出显示破损的绑定并告诉你它们有什么问题。

如果要绑定到父DataContext上的“SelectedExaminationQuestionInCluster”,可以使用以下语法:

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

你必须给外部ListView一个名称。

编辑:我刚刚意识到这可能没有意义。如果每个Cluster都有自己的ExaminationQuestions集合,那么每个Cluster也应该有一个SelectedExaminationQuestion。除非在所有集群之间共享,否则父DataContext不应具有SelectedQuestion的任何概念。