我有一个使用ListStack的ItemsPanelTemplate使用ListView的以下DataTemplate。
<DataTemplate x:Key="DayTemplate">
<Border BorderBrush="Black"
BorderThickness="2"
CornerRadius="5"
Width="150"
Height="440"
Background="White">
<StackPanel Orientation="Vertical">
<Border BorderBrush="Black"
BorderThickness="0 0 0 5"
Background="White">
<StackPanel>
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Add Session"
Command="{x:Static cmd:TimetableCommands.AddSession}"/>
</ContextMenu>
</StackPanel.ContextMenu>
<TextBlock FontWeight="Bold"
TextAlignment="Center"
Text="{Binding Path=DateInfo.Date, Mode=OneWay, Converter={StaticResource DateNoTime}}"/>
<TextBlock TextAlignment="Center"
FontWeight="Bold"
Text="{Binding Path=DateInfo.DayOfWeek}"/>
</StackPanel>
</Border>
<ListBox Name="lbSessions"
Background="Transparent"
HorizontalAlignment="Center"
Visibility="Visible"
ItemsSource="{Binding Source={StaticResource SessionList}}"
ItemTemplate="{StaticResource SessionTemplate}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</StackPanel>
</Border>
</DataTemplate>
我还有以下收集源,我想将其用于排序功能。它在单独的资源库中,在定义DataTemplate的资源库中正确引用。
<CollectionViewSource Source="{Binding Path=Sessions, Mode=OneWay}"
x:Key="SessionList">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="StartTime"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
运行时,不显示任何数据,并且输出窗口指示收集源正在尝试从窗口级别DataContext而不是列表使用的DataContext(列表的两层)中获取项目列表的数据。 (从Window ViewModel向下)。
如果我更改行
ItemsSource="{Binding Source={StaticResource SessionList}}"
到
ItemsSource="{Binding Path=Sessions}"
它可以正常工作,尽管我不再具有Collection Source的排序功能,我真的想利用它来避免不得不编写自己的排序代码。
这是怎么回事?以及如何在集合源上设置正确的DataContext。
答案 0 :(得分:0)
您是否有必要将CollectionViewSource保存在单独的ResourceDictionary中?
尝试将CollectionViewSource嵌套在列表框的项目中
LinkListControlToField1.Active := false;