簡體   English   中英

具有CollectionViewSource的WPF ListView在ViewModel中未獲取SelectedItem

[英]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>

您將ListViewDataContext設置為本地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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM