我有一个 ListView 我正在使用 CollectionViewSource 进行分组,但我似乎无法将所选项目重新放入 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>
最佳答案
您设置 DataContext
的ListView
到您本地的CollectionViewSource
.这意味着绑定(bind) SelectedItem
至SelectedComparatorGroupItem
将寻找 SelectedComparatorGroupItem
CollectionViewSource
上的属性(property),而不是您的 View 模型。您应该会在输出窗口中看到某种绑定(bind)错误。
不要设置 DataContext
,就让它自然流过。您需要做的就是绑定(bind) ItemsSource
到CollectionViewSource
.
我认为这会做到,但我没有打开 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
.
关于c# - 带有 CollectionViewSource 的 WPF ListView 未在 ViewModel 中获取 SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44737415/