如何从列表视图中获取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;
}
假设用户控件的数据上下文设置为包含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}" />