[英]WPF ListView with CollectionViewSource not getting SelectedItem in ViewModel
我有一個ListView,我正在使用CollectionViewSource進行分組,但似乎無法將所選項目放回ViewModel中。 我需要做什么才能獲得用戶選擇的物品? 在使用collectionviewSource時,SelectedItem =“ {Binding SelectedComparatorGroupItem}”似乎不起作用,我嘗試使用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>
您將ListView
的DataContext
設置為本地CollectionViewSource
。 這意味着將SelectedItem
綁定到SelectedComparatorGroupItem
將要在CollectionViewSource
而不是您的viewmodel上查找SelectedComparatorGroupItem
屬性。 您應該在輸出窗口中看到某種綁定錯誤。
不要設置DataContext
,而是讓它自然地流過。 您需要做的就是將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
懶惰時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.