2015-07-20 53 views
0

這裏是代碼(精縮):爲什麼ListView和分組CollectionViewSource不顯示任何項目?

<Page 
    x:Class="Compote.HubPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:Compote" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    DataContext="{Binding HubViewModel, Source={StaticResource Locator}}" 
    mc:Ignorable="d" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 

    <Page.Resources> 
     <DataTemplate x:Key="DefaultItemTemplate"> 
      <Border Margin="0,0,0,9.5" Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}"> 
       <Grid> 
        <Image Source="{Binding ImagePath}" Stretch="UniformToFill" Height="170"/> 
        <StackPanel Margin="15,12" VerticalAlignment="Bottom"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="14.5" /> 
           <ColumnDefinition Width="Auto" /> 
          </Grid.ColumnDefinitions> 
          <StackPanel Grid.Column="0"> 
           <TextBlock Text="{Binding Name}" Style="{ThemeResource CustomListViewItemTextBlockStyle}" /> 
          </StackPanel> 
          <TextBlock Grid.Column="2" Text="{Binding Price, Converter={StaticResource PriceConverter}}" Style="{ThemeResource CustomListViewItemSecondaryTextBlockStyle}"/> 
         </Grid> 
         <TextBlock Text="{Binding Description}" Style="{ThemeResource ListViewItemContentTextBlockStyle}" TextTrimming="CharacterEllipsis" /> 
         <TextBlock Text="{Binding Weight, Converter={StaticResource WeightConverter}}" Style="{ThemeResource ListViewItemSubheaderTextBlockStyle}" /> 
        </StackPanel> 
       </Grid> 
      </Border> 
     </DataTemplate> 

     <CollectionViewSource x:Key="CollectionViewSourceCategories" Source="{Binding Categories}" IsSourceGrouped="True" ItemsPath="Items" />   
    </Page.Resources> 


<ListView AutomationProperties.AutomationId="ItemListViewSection4" 
      AutomationProperties.Name="Items In Group" 
      SelectionMode="None" 
      IsItemClickEnabled="True" 
      ItemsSource="{Binding Source={StaticResource CollectionViewSourceCategories}}" 
      ContinuumNavigationTransitionInfo.ExitElementContainer="True" 
      ItemTemplate="{StaticResource DefaultItemTemplate}" AllowDrop="True"> 
    <ListView.GroupStyle> 
     <GroupStyle HidesIfEmpty="True"> 
      <GroupStyle.HeaderTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding Name}" /> 
       </DataTemplate> 
      </GroupStyle.HeaderTemplate> 
     </GroupStyle> 
    </ListView.GroupStyle> 
    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
     </Style> 
    </ListView.ItemContainerStyle> 
</ListView> 

正如你所看到的,CollectionViewSource被綁定到ListView及其IsSourceGrouped屬性設置爲TrueCategories包含2個類別,每個類別中有3個項目。但ListView沒有顯示任何內容,完全是空的。怎麼了?

+0

如果你設置源只是在ListView類別,會發生什麼,如果出現數據只是爲了看? –

+0

@Juan Pablo Garcia Coello如果我只將'Categories'綁定到'ListView',那麼類別列表就像預期的那樣出現。 – kulaeff

+0

HubViewModel中的類別已實現Inotifypropertychanged? –

回答

0

您需要在GroupStyle中添加itemPresenter。

  <ListView Name="MyList" ItemsSource="{Binding Source={StaticResource CollectionViewSourceCategories}}" Grid.Row="1" Grid.Column="0"> 
      <ListView.GroupStyle> 
       <GroupStyle> 
        <GroupStyle.ContainerStyle> 
         <Style TargetType="{x:Type GroupItem}"> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="{x:Type GroupItem}"> 
             <Grid> 
              <Grid.RowDefinitions> 
               <RowDefinition Height="1*" /> 
               <RowDefinition Height="Auto" /> 
              </Grid.RowDefinitions> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="1*" /> 
              </Grid.ColumnDefinitions> 
              <!-- ItemsPresenter --> 
              <ItemsPresenter /> 
              <TextBlock Text="{Binding Name}" /> 
             </Grid> 
            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style> 
        </GroupStyle.ContainerStyle> 
       </GroupStyle> 
      </ListView.GroupStyle> 

      <ListView.View> 
       <GridView> 
        <GridView.Columns> 
         <GridViewColumn Header="NAME" DisplayMemberBinding="{Binding name}" /> 
        </GridView.Columns> 
       </GridView> 
      </ListView.View> 
     </ListView> 

別的東西,如果你分組項可能有幫助的是一個PropertyGroupDescription添加到您的collectionViewSource: 首先添加到您的聲明: 的xmlns:DAT =「CLR的命名空間:System.Windows。數據;裝配= PresentationFramework」的xmlns:VSM = 「CLR的命名空間:System.Windows;裝配= System.Windows」

那麼你的CollectionViewSource:

  <CollectionViewSource x:Key="CollectionViewSourceCategories" Source="{Binding Categories}"> 
       <CollectionViewSource.GroupDescriptions> 
        <dat:PropertyGroupDescription PropertyName="Categories" /> 
       </CollectionViewSource.GroupDescriptions> 
       <CollectionViewSource.SortDescriptions> 
        <scm:SortDescription PropertyName="Names" /> 
       </CollectionViewSource.SortDescriptions> 
      </CollectionViewSource> 

通過您的類別這將組,然後SOR噸的名字。這裏是解釋它的鏈接:

https://msdn.microsoft.com/en-us/library/ff407126(v=vs.100).aspx 

希望這有助於!

+0

'ListView'仍然沒有顯示任何組和項目。 – kulaeff

+0

你能爲你的源數據添加代碼嗎? – EMAW2008

0

你必須綁定到CollectionViewSourceView屬性:

ItemsSource="{Binding Source={StaticResource CollectionViewSourceCategories}, Path=View}" 
+0

謝謝,但沒有任何改變。 – kulaeff

相關問題