【发布时间】:2014-09-06 19:28:10
【问题描述】:
我创建了一个列表视图,其中项目按不同类别排序。我正在尝试让列表视图的 selectedItem 进入我的 Viewmodel 中的属性,我遵循常规方法,只需将绑定设置为 SelectedItem 属性。
但是,由于我现在实际上只是将 datacontext 设置为我的可观察集合,而不是触及 ItemsSource 属性(或者我是吗?),我相信我缺少一些花哨的 xaml 代码来使 SelectedItem 的绑定工作。希望有人遇到类似的问题。 xaml 代码,viewmodel 中声明的 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;
}
【问题讨论】: