Проблемы с использованием 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>

Теперь в коде я назначаю Source для 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;
   }
}

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

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


person Johnny    schedule 30.11.2009    source источник


Ответы (1)


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

РЕДАКТИРОВАТЬ: оказывается, что GetDefaultView не существует в Silverlight, только WPF. Я успешно использовал PagedCollectionView(myCOllection) для группировки.

person AlignedDev    schedule 13.05.2010