使用它从ListView收集源不同的DataContext

时间:2018-11-10 13:19:26

标签: wpf data-binding collections

我有一个使用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。

1 个答案:

答案 0 :(得分:0)

您是否有必要将CollectionViewSource保存在单独的ResourceDictionary中?

尝试将CollectionViewSource嵌套在列表框的项目中

LinkListControlToField1.Active := false;