5

为什么此代码会在 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实例添加到我的视图模型中,那么一切正常。

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

4

3 回答 3

5

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

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

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

请注意,我们没有将源直接设置为CollectionViewSource,而是设置了 'pathless' Binding,基本上将其CollectionViewSource用作 a DataContext(只是一种思考方式,实际上在技术上并不正确)。

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

于 2013-07-16T17:22:11.773 回答
2

在您的列表视图中添加“StaticResource”和“Source”

<ListView ItemsSource="{Binding Source={StaticResource WhatevSource}}"/>
于 2014-09-25T11:46:30.517 回答
0

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

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

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

请注意,这对我的两个ListViews 并让它们在SemanticZoom.

于 2013-07-16T18:49:34.560 回答