2011-01-10 37 views
2

我希望这是有道理的。CollectionViewSource不能在XAML中使用DataBound,但可以在CodeBehind中使用?

我有一个使用Windows Phone Databound应用程序模板的Windows Phone 7应用程序。

我需要对绑定到ViewModel的列表框进行排序,所以我在XAML中创建了一个CollectionViewSource,并将ListBox ItemSource设置为CollectionViewSource。在Designer中,一切都很好,我可以看到SampleData很棒。然而,当我运行应用程序,则抛出异常:

System.Windows.Markup.XamlParseException了未处理 消息= AG_E_PARSER_BAD_PROPERTY_VALUE [行:33的位置:31] LineNumber上= 33 LinePosition = 31

有问题的XAML是:

<CollectionViewSource Source="{Binding Items}" x:Key="ItemsSort" > 
    <CollectionViewSource.SortDescriptions> 
     <compMod:SortDescription PropertyName="Order" Direction="Ascending"/> 
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

列表框:

<Grid> 
    <ListBox x:Name="MainListBox" ItemsSource="{Binding Source={StaticResource ItemsSort}}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 

现在,如果我删除源=“{绑定表项}”从CollectionViewSource,而是通过代码设置:

CollectionViewSource itemsView = this.Resources["ItemsSort"] as CollectionViewSource; 
itemsView.Source = App.ViewModel.Items; 

一切正常在运行,但当然,样本数据我也不会出现在设计时。

我真的不明白为什么会出现这种情况,我希望能够灵活地在设计时查看示例数据并使用XAML配置数据绑定。

回答

-1

页面中有多少个“ItemsSort”资源的其他客户端。它对资源字典中的某些东西进行绑定对我来说总是看起来有些rope y。

试试这个: -

<ListBox x:Name="MainListBox"> 
    <ListBox.ItemsSource> 
     <CollectionViewSource Source="{Binding Items}"> 
      <CollectionViewSource.SortDescriptions> 
       <compMod:SortDescription PropertyName="Order" Direction="Ascending"/> 
      </CollectionViewSource.SortDescriptions> 
     </CollectionViewSource> 
    </ListBox.ItemsSource> 
+0

感谢您的建议。我试过了,IDE告诉我一个CollectionViewSource在ListBox.ItemsSource – 2011-01-12 14:59:36

1

我一直做我的CollectionViewSource视图模型的属性。我从来没有像使用静态资源一样尝试过,但下面的提示可能会帮助你。

ListBox ItemsSource绑定应设置为CollectionViewSource.View,而不是CollectionViewSource。

在您的视图模型试试这个:

ItemsSort = new CollectionViewSource(); 
ItemsSort.Add(new System.ComponentModel.SortDescription("Order", System.ComponentModel.ListSortDirection.Ascending)); 
ItemsSort.Source = Items; 

在你的XAML(在绑定路径注意到.View)试试这个:

<ListBox x:Name="MainListBox" ItemsSource="{Binding Path={ItemsSort.View}}"> 

编辑:上面的提示是全Silverlight - 希望这也适用于Windows Phone,但我没有尝试过。

-1

只是为了清楚:Windows Phone的不支持CollectionViewSource

http://msdn.microsoft.com/ru-ru/library/system.windows.data.collectionviewsource.sortdescriptions(v=vs.110).aspx

Platforms 
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported) 
+0

中是无效的,谁说的?我一生都在使用它。检查此链接http://www.hanselman.com/blog/CollectionViewSourceIsCrazyUsefulForBindingToFilteredObservableCollectionsOnWindowsPhone8.aspx – 2014-12-02 09:28:35

相关问题