CollectionViewSource“值不在预期范围内。”

时间:2013-07-16 17:01:09

标签: xaml windows-store-apps winrt-xaml

为什么此代码会在Windows 8 XAML应用程序中产生错误?

  

价值不在预期范围内。

XAML:

    <SemanticZoom>
        <SemanticZoom.ZoomedInView>
            <ListView
                Style="{StaticResource HorizontalListViewStyle}"
                SelectionMode="None"
                ScrollViewer.IsHorizontalScrollChainingEnabled="False"
                ItemsSource="{Binding BoardItems}" 
                ItemContainerStyle="{StaticResource ZoomedOutListViewItemContainerStyle}"
...

MVVM代码:

ObservableCollection<WritingBoardModel> boards = new ObservableCollection<WritingBoardModel>();

... // Add item models to boards.

CollectionViewSource v = new CollectionViewSource()
{
    Source = boards,
};

this.ViewModel.Add(BoardItemsViewModelKey, v);

如果我跳过CollectionViewSource并直接将boards实例添加到我的视图模型中,那么一切正常。

我认为我需要使用CollectionViewSource才能使某些语义缩放选择行为起作用。

3 个答案:

答案 0 :(得分:5)

所以,CollectionViewSource很奇怪,你必须绑定它们的方式也很奇怪。举个例子,为了“按书”(样本项目的方式),我发现它实际上必须是StaticResource

<Page.Resource>
    <CollectionViewSource Source="{Binding Whatev}"
                          x:Key="WhatevSource"/>
</Page.Resource>

<GridView ItemsSource="{Binding Source={StaticResource WhatevSource}}"/>

请注意,我们没有直接将来源设置为CollectionViewSource,但我们设置的是“无路径”Binding,基本上使用CollectionViewSource作为DataContext (只是一种思考方式,实际上技术上并不正确)。

这是我能够让它工作的唯一方法,不过我相信你在技术上可以在代码隐藏中将ItemsSource直接设置为CollectionViewSource的视图或类似的东西。

答案 1 :(得分:2)

在Listview中添加“StaticResource”和“Source”

<ListView ItemsSource="{Binding Source={StaticResource WhatevSource}}"/>

答案 2 :(得分:0)

我需要像这样绑定到CollectionViewSource的View属性:

CollectionViewSource v = new CollectionViewSource()
        {
            IsSourceGrouped = false,
            Source = boards,
        };

this.ViewModel.Add(BoardItemsViewModelKey, v.View);

请注意,这对我的两个ListView没有帮助,并且在SemanticZoom中保持选择同步。