2009-11-30 3 views
1

У меня возникли проблемы при реализации CollectionViewSource в silverlight. Я новичок в этой теме, поэтому в основном я слежу за тем, что искал в Интернете. Вот что я пытался сделать до сих пор.Проблема с использованием CollectionViewSource в Silverlight

Я создаю 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 в собственности, например:

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; 
    } 
} 

После проверки этого I realiz е, что информация не отображается на экране, и я действительно не знаю, почему, может ли кто-нибудь помочь мне в этом вопросе?

Надеюсь, что это имеет смысл, спасибо заранее!

ответ

0

Я не думаю, что вам нужно каждый раз перезагружать источник. Вы должны использовать this.TestCVS = CollectionViewSource.GetDefaultView (myCollection); на загруженном событии, а затем добавьте и удалите из myCollection. Вы получаете уведомление об изменении бесплатно с помощью ObservableCollection. Я не тестировал эту идею полностью, но она должна работать теоретически.

EDIT: Оказывается, GetDefaultView не существует в Silverlight, а только в WPF. Я успешно использовал PagedCollectionView (myCOllection) для группировки.

Смежные вопросы