1

我有一个 WPF 模型,它包含一个视图源、一个列表视图和一个按钮,用于在视图模型中为列表视图中选择的项目执行 ICommand。

<Window.Resources>
    <CollectionViewSource x:Key="teachingSessionsViewSource" d:DesignSource="{d:DesignInstance {x:Type local:TeachingSessionListItem}, CreateList=True}"/>
</Window.Resources>
...
    <GroupBox Header="All Sessions" 
              DataContext="{Binding Source={StaticResource teachingSessionsViewSource}}">
        <StackPanel>
            <ListView x:Name="TeachingSessionList" 
                      ItemsSource="{Binding}"
                      SelectedItem="{Binding Path=/}">
                <ListView.View>
                    <GridView ColumnHeaderContainerStyle="{StaticResource noHeaderStyle}">
                        <GridViewColumn DisplayMemberBinding="{Binding SessionDate}"/>
                        <GridViewColumn DisplayMemberBinding="{Binding PresenterInitials}" Width="30" />
                    </GridView>
                </ListView.View>
            </ListView>
            <Button Content="Un-Assign" Margin="5,5" Command="{Binding Path=/UnAssignPresentation}" 
        </StackPanel>
    </GroupBox>

问题是 ICommand UnAssignPresentation 总是在列表中的第一个项目上执行,而不管在列表视图中选择了哪个项目。也就是说,CollectionViewSource 的 currentItem 属性似乎没有绑定到 ListView。

我究竟做错了什么?非常感谢你。

4

1 回答 1

2

尝试添加IsSynchronizedWithCurrentItem="True"到您的 ListView。

此外,更喜欢将 listview 绑定到视图模型中的集合而不是资源。
然后,您可以将属性添加到所选项目的视图模型,
并将列表视图的所选项目绑定到视图模型中的该属性,
并将按钮的命令绑定到视图模型中作用于当前项目的命令,
或者传递您要通过绑定到所选项目的命令参数来操作的项目。

于 2013-02-07T20:09:11.217 回答