C# CollectionViewSource未在ViewModel中获取SelectedItem的WPF ListView

C# CollectionViewSource未在ViewModel中获取SelectedItem的WPF ListView,c#,wpf,listview,mvvm,C#,Wpf,Listview,Mvvm,我有一个使用CollectionViewSource进行分组的ListView,但我似乎无法将所选项目返回到ViewModel中。要获取用户选择的项目,我需要做什么? SelectedItem=“{Binding SelectedComparatorGroupItem}”在使用collectionviewSource时似乎不起作用,我尝试了IsSynchronizedWithCurrentItem=“True”,但没有帮助 <Grid>

我有一个使用CollectionViewSource进行分组的ListView,但我似乎无法将所选项目返回到ViewModel中。要获取用户选择的项目,我需要做什么? SelectedItem=“{Binding SelectedComparatorGroupItem}”在使用collectionviewSource时似乎不起作用,我尝试了IsSynchronizedWithCurrentItem=“True”,但没有帮助

                <Grid>
                    <Grid.Resources>
                        <CollectionViewSource x:Key="NumberGroups"
                                              Source="{Binding Path=ComparatorGroupItemList}">
                            <CollectionViewSource.GroupDescriptions>
                                <PropertyGroupDescription PropertyName="Group" />
                            </CollectionViewSource.GroupDescriptions>
                        </CollectionViewSource>
                    </Grid.Resources>
                    <ListView x:Name="lvNumbers"
                              DataContext="{StaticResource NumberGroups}"
                              ItemsSource="{Binding IsAsync=True}"
                              IsSynchronizedWithCurrentItem="True"
                              SelectedItem="{Binding SelectedComparatorGroupItem}"
                              VirtualizingPanel.IsContainerVirtualizable="True"
                              VirtualizingPanel.IsVirtualizing="True"
                              VirtualizingPanel.IsVirtualizingWhenGrouping="True">           
                          
                        <ListView.View>
                            <GridView>
                                <GridViewColumn Header="Number" DisplayMemberBinding="{Binding Number}"/>
                                <GridViewColumn Header="# Found" DisplayMemberBinding="{Binding NumberFound}"/>
                            </GridView>
                        </ListView.View>
                        <ListView.GroupStyle>
                            <GroupStyle>
                                <GroupStyle.ContainerStyle>
                                    <Style TargetType="{x:Type GroupItem}">
                                        <Setter Property="Template">
                                            <Setter.Value>
                                                <ControlTemplate>
                                                    <Expander IsExpanded="False">
                                                        <Expander.Header>
                                                            <StackPanel Orientation="Horizontal">
                                                                <TextBlock Text="{Binding Name}"
                                                                           Margin="3"
                                                                           FontSize="18" FontWeight="Bold"
                                                                           />
                                                                <TextBlock Text="{Binding ItemCount}"
                                                                           Margin="3"
                                                                           FontSize="18" FontWeight="Bold"
                                                                           />
                                                            </StackPanel>
                                                        </Expander.Header>
                                                        <ItemsPresenter/>
                                                    </Expander>
                                                </ControlTemplate>
                                            </Setter.Value>
                                        </Setter>
                                    </Style>
                                </GroupStyle.ContainerStyle>
                            </GroupStyle>
                        </ListView.GroupStyle>
                    </ListView>
                </Grid>

           
     

您可以将
列表视图
数据上下文
设置为本地
集合视图源
。这意味着将
SelectedItem
绑定到
SelectedComparatorGroupItem
将查找
CollectionViewSource
上的
SelectedComparatorGroupItem
属性,而不是您的viewmodel。您应该会在输出窗口中看到某种绑定错误

不要设置
DataContext
,让它自然地通过。您只需将
项资源
绑定到
集合视图源

我想这样就可以了,但我没有打开VS或访问您的ViewModel的权限来验证:

<ListView x:Name="lvNumbers"
    ItemsSource="{Binding Source={StaticResource NumberGroups}, IsAsync=True}"
    IsSynchronizedWithCurrentItem="True"
    SelectedItem="{Binding SelectedComparatorGroupItem}"
    VirtualizingPanel.IsContainerVirtualizable="True"
    VirtualizingPanel.IsVirtualizing="True"
    VirtualizingPanel.IsVirtualizingWhenGrouping="True"> 


一般来说,如果您设置某个内容的
DataContext
,那么您没有按照WPF希望的方式进行。通常,我唯一设置它的地方是当我懒洋洋地使用
UserControl

时,将
ListView
DataContext
设置为本地
CollectionViewSource
。这意味着将
SelectedItem
绑定到
SelectedComparatorGroupItem
将查找
CollectionViewSource
上的
SelectedComparatorGroupItem
属性,而不是您的viewmodel。您应该会在输出窗口中看到某种绑定错误

不要设置
DataContext
,让它自然地通过。您只需将
项资源
绑定到
集合视图源

我想这样就可以了,但我没有打开VS或访问您的ViewModel的权限来验证:

<ListView x:Name="lvNumbers"
    ItemsSource="{Binding Source={StaticResource NumberGroups}, IsAsync=True}"
    IsSynchronizedWithCurrentItem="True"
    SelectedItem="{Binding SelectedComparatorGroupItem}"
    VirtualizingPanel.IsContainerVirtualizable="True"
    VirtualizingPanel.IsVirtualizing="True"
    VirtualizingPanel.IsVirtualizingWhenGrouping="True"> 


一般来说,如果您设置某个内容的
DataContext
,那么您没有按照WPF希望的方式进行。通常,我唯一设置它的地方是当我懒洋洋地使用
UserControl

什么是
SelectedComparatorGroupItem
?什么是
SelectedComparatorGroupItem
?谢谢,我正在构建一个插件。代码盲!谢谢,我把这个放在一起是为了测试我正在构建的插件。代码盲!