C# CollectionViewSource未在ViewModel中获取SelectedItem的WPF ListView
我有一个使用CollectionViewSource进行分组的ListView,但我似乎无法将所选项目返回到ViewModel中。要获取用户选择的项目,我需要做什么? SelectedItem=“{Binding SelectedComparatorGroupItem}”在使用collectionviewSource时似乎不起作用,我尝试了IsSynchronizedWithCurrentItem=“True”,但没有帮助C# CollectionViewSource未在ViewModel中获取SelectedItem的WPF ListView,c#,wpf,listview,mvvm,C#,Wpf,Listview,Mvvm,我有一个使用CollectionViewSource进行分组的ListView,但我似乎无法将所选项目返回到ViewModel中。要获取用户选择的项目,我需要做什么? SelectedItem=“{Binding SelectedComparatorGroupItem}”在使用collectionviewSource时似乎不起作用,我尝试了IsSynchronizedWithCurrentItem=“True”,但没有帮助 <Grid>
<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
?谢谢,我正在构建一个插件。代码盲!谢谢,我把这个放在一起是为了测试我正在构建的插件。代码盲!