为什么此代码会在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
才能使某些语义缩放选择行为起作用。
答案 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
中保持选择同步。