2010-01-23 18 views
17

Próbuję zrobić podstawowe wykorzystanie CollectionViewSource i muszę czegoś brakuje, ponieważ po prostu nie działa. Tu jest mój XAML:CollectionViewSource Użyj pytania

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

To kompiluje grzywny, ale gdy uruchamiam aplikację otrzymuję ten błąd:

 
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 

Jest to zbiór Ja załączając do:

// 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)); 

Po prostu chcę zrobić proste grupowanie na obiekcie Project SourceProject. Raczej nie będę musiał wyłamać widoku drzewa.

Odpowiedz

38

ten powinien pracować dla Ciebie

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

Pewnego dnia będę zbyt mądry i po prostu wiem, tego rodzaju rzeczy! (Dzięki za pomoc!) – Vaccano

+1

Pomógł mi też ... Ale dlaczego to działa, a oryginalny wariant nie działa? :) –

+0

@DmitryLobanov Zasadniczo CollectionViewSource nie jest zbiorem, ale można go użyć do uzyskania dostępu. To może pomóc http://www.zagstudio.com/blog/387#.UyC1nPldV-4 –