2010-01-23 3 views
17

J'essaie de faire un usage basique de CollectionViewSource et il me manque quelque chose parce que ça ne marche pas. Voici mon XAML:CollectionViewSource Utilisation Question

<Window.Resources> 
    <CollectionViewSource Source="{Binding loc:MainVM.Instance.MapItems}" x:Key="MapCV"> 
    <CollectionViewSource.GroupDescriptions> 
     <PropertyGroupDescription PropertyName="SourceProject" /> 
    </CollectionViewSource.GroupDescriptions> 
    </CollectionViewSource> 
</Window.Resources> 

<ListBox ItemsSource="{StaticResource MapCV}" HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid HorizontalAlignment="Stretch"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="2*"/> 
        <ColumnDefinition Width="2*"/> 
        <ColumnDefinition Width="50"/> 
       </Grid.ColumnDefinitions> 
       <TextBlock Grid.Column="0" Text="{Binding SourceType, Converter={StaticResource WorkItemTypeToStringConverter}}"/> 
       <ComboBox Grid.Column="1" SelectedItem="{Binding DestType}" ItemsSource="{Binding WorkItemTypesForCurrentDestProject, Source={x:Static loc:MainMediator.Instance}, diagnostics:PresentationTraceSources.TraceLevel=High}" DisplayMemberPath="Name" /> 
       <Button Grid.Column="2" Content="{Binding PercentMapped}"/> 
      </Grid> 
     </DataTemplate>           
    </ListBox.ItemTemplate> 
</ListBox> 

Cette compile très bien, mais quand je lance l'application je reçois cette erreur:

 
Cannot convert the value in attribute 'ItemsSource' to object of type 
'System.Collections.IEnumerable'. 'System.Windows.Data.CollectionViewSource' 
is not a valid value for property 'ItemsSource'. Error at object 
'System.Windows.Controls.ListBox' in markup file 'WIAssistant;component/main.xaml 

C'est la collection Je joins à:

// The mappings used to copy the values of the fields of one WorkItem to another. 
public ObservableCollection<WorkItemTypeMapping> WorkItemTypeMappings 
{ 
    get { return (ObservableCollection<WorkItemTypeMapping>) 
      GetValue(WorkItemTypeMappingsProperty); } 
    set { SetValue(WorkItemTypeMappingsProperty, value); } 
} 
public static readonly DependencyProperty WorkItemTypeMappingsProperty = 
    DependencyProperty.Register("WorkItemTypeMappings", 
    typeof(ObservableCollection<WorkItemTypeMapping>), typeof(MainMediator), 
    new UIPropertyMetadata(null)); 

Je veux juste faire un simple regroupement sur l'objet Project SourceProject. Je préférerais ne pas devoir sortir une vue d'arbre pour ceci.

Répondre

38

Cela devrait fonctionner pour vous

<ListBox ItemsSource="{Binding Source={StaticResource MapCV}}" ... 
+12

Un jour, je serai trop intelligent et sait que ce genre de choses! (Merci pour l'aide!) – Vaccano

+1

Il m'a aidé aussi ... Mais pourquoi cela fonctionne, et la variante originale ne fonctionne pas? :) –

+0

@DmitryLobanov Fondamentalement, une CollectionViewSource n'est pas elle-même une collection, mais elle peut être utilisée pour y accéder. Cela pourrait aider http://www.zagstudio.com/blog/387#.UyC1nPldV-4 –

Questions connexes