2009-11-30 47 views
1

在silverlight中實現CollectionViewSource時遇到了一些麻煩。我是這個主題的新手,所以基本上我一直在關注通過網絡搜索的內容。這是迄今爲止我一直在嘗試做的事情。在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屬性中的源代碼,如下所示:

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

經過測試後,我將realiz e信息沒有顯示在屏幕上,我真的不知道爲什麼,有誰能幫我解決這個問題?

希望這是有道理的,在此先感謝!

回答

0

我不認爲你需要每次重置源。你應該使用this.TestCVS = CollectionViewSource.GetDefaultView(myCollection);在加載的事件上,然後添加並從myCollection中刪除。您可以通過ObservableCollection免費獲得更改通知。我沒有徹底地檢驗過這個想法,但它理論上應該起作用。

編輯: 事實證明,GetDefaultView不存在於Silverlight,只有WPF。我已成功使用PagedCollectionView(myCOllection)進行分組。