如何从列表视图中获取selecteditems属性

本文关键字:获取 selecteditems 属性 视图 列表 | 更新日期: 2023-09-27 18:20:50

我创建了一个列表视图,其中项目按不同类别排序。我正试图让listview的selectedItem进入我的Viewmodel中的一个属性,我遵循了常规的方法,只需设置对selectedItem属性的绑定。

然而,由于我现在实际上只将数据上下文设置为我的可观察集合,而没有触摸ItemsSource属性(或者我是?),我相信我缺少了一些花哨的xaml代码来使SelectedItem的绑定工作。希望有人遇到类似的问题。xaml代码,以及在视图模型中声明的2个属性如下所示。

<UserControl.Resources>
    <CollectionViewSource x:Key="TileChangeType"                               
                  Source="{Binding TileChangeList.TileChangeListEntries}">
        <CollectionViewSource.GroupDescriptions>
            <PropertyGroupDescription PropertyName="Type" />
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>
</UserControl.Resources>
<ListView Grid.Column="0" x:Name="gridTiles" VirtualizingPanel.IsVirtualizing="False" VirtualizingPanel.IsVirtualizingWhenGrouping="False"
                      DataContext="{StaticResource TileChangeType}"
                      SelectedItem="{Binding SelectedTileChange}"
      ItemsSource="{Binding IsAsync=True}">

            <ListView.GroupStyle>
                <GroupStyle>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type GroupItem}">
                                        <Expander IsExpanded="True">
                                            <Expander.Header>
                                                <TextBlock Background="Aqua" Text="{Binding Path=Name}"/>
                                            </Expander.Header>
                                            <ItemsPresenter />
                                        </Expander>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                    <GroupStyle.Panel>
                        <ItemsPanelTemplate>
                            <DataGridRowsPresenter/>
                        </ItemsPanelTemplate>
                    </GroupStyle.Panel>
                </GroupStyle>
            </ListView.GroupStyle>
            <ListView.View>
                <GridView>
                    <GridView.Columns>
                        <GridViewColumn Header="X" DisplayMemberBinding="{Binding X}" />
                        <GridViewColumn Header="Y" DisplayMemberBinding="{Binding Y}" />
                        <GridViewColumn Header="Z" DisplayMemberBinding="{Binding Z}" />
                        <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Type}" Width="40"/>
                    </GridView.Columns>
                </GridView>
            </ListView.View>
            </ListView>

模型"SelectedTileChange"声明如下:

    public TileChange SelectedTileChange
    {
        get;
        set;
    }
    //Class contains an Observable Collection of the TileChange class (same class as SelectedItem is binding to)
    //E.g. ObservableCollection<TileChange> tileChangeListEntries;
    public TileChangeList TileChangeList
    {
        get;
        set;
    }

如何从列表视图中获取selecteditems属性

假设用户控件的数据上下文设置为包含SelectedTileChange属性的视图模型,则可以绑定到SelectedItem属性,如下所示:

SelectedItem="{Binding DataContext.SelectedTileChange, 
              RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"

这将找到用户控件,并绑定到其数据上下文上的SelectedTileChange属性。

但通常情况下,您只需将ListView直接绑定到CollectionViewSource,而不是设置其数据上下文。这样就不需要创建这种RelativeSource绑定:

<ListView ItemsSource="{Binding Source={StaticResource TileChangeType}}"
          SelectedItem="{Binding SelectedTileChange}" />