我在Silverlight中实现CollectionViewSource时遇到了一些麻烦。我是这个主题的新手,所以基本上我一直在关注我在网上搜索的内容。这就是我到目前为止所做的一切。
我正在资源标签中创建一个CollectionViewSource:
<UserControl.Resources>
<CollectionViewSource x:Key="TestCVS">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Value" Direction="Ascending" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</UserControl.Resources>
然后我将我的TestCVS绑定在HierarchicalDataTemplate中:
<common:HierarchicalDataTemplate ItemsSource="{Binding Source={StaticResource TestCVS}}">
<common:HierarchicalDataTemplate.ItemTemplate>
<common:HierarchicalDataTemplate>
<Border BorderBrush="#FF464646" BorderThickness="1" CornerRadius="3" Padding="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock TextWrapping="Wrap" Text="{Binding MyClassField}"/>
</StackPanel>
</Grid>
</Border>
</common:HierarchicalDataTemplate>
</common:HierarchicalDataTemplate.ItemTemplate>
</common:HierarchicalDataTemplate>
现在,在后面的代码中,我在一个属性中为TestCVS分配了Source,如下所示:
private ObservableCollection<MyClass> _MyClass;
public ObservableCollection<MyClass> MyClass
{
get { return _MyClass; }
set
{
var testCVS = (this.Resources["TestCVS"] as CollectionViewSource);
if (testCVS != null)
testCVS.Source = value;
}
}
经过测试后,我发现屏幕上没有显示信息,我真的不知道为什么,有人可以帮我解决这个问题吗?
希望这有任何意义,提前谢谢!
答案 0 :(得分:0)
我认为您不需要每次都重置源。你应该使用this.TestCVS = CollectionViewSource.GetDefaultView(myCollection);在加载的事件上,然后添加和删除myCollection。您可以使用ObservableCollection免费获得更改通知。我没有彻底测试过这个想法,但它应该在理论上起作用。
编辑: 事实证明,Silverlight中不存在GetDefaultView,只有WPF。我已成功使用PagedCollectionView(myCOllection)进行分组。