2013-07-15 20 views
1

我正在使用C#/ XAML開發Windows應用商店應用程序。我主要在iOS和一定程度上的Android應用程序開發方面有經驗,但對C#/ XAML世界還不舒服。Windows StoreApp XAML:基於數據類型更改GridView中的ItemTemplate

這是我在基於GridView的頁面中的問題(基於很好的模板VS2012生成)。

我有一個gridview和它的集合綁定到從網絡檢索的數據,它工作正常。 但我想根據數據更改網格項目。 例如:我有我想使用不同的網格視圖項顯示的文件和文件夾。

我的問題:如何根據數據爲ItemTemplate使用不同的DataTemplate?例如,對於「文件夾」,我將只有一個垂直居中的文本塊,對於文件,我將擁有兩個文本塊並且視覺上不同。

我走的是正確的道路還是我應該做的完全不同?

的XAML部分

<GridView 
      x:Name="itemGridView" 
      AutomationProperties.AutomationId="ItemGridView" 
      AutomationProperties.Name="Grouped Items" 
      Grid.RowSpan="3" 
      Padding="116,137,40,46" 
      ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}" 
      ItemTemplate="{StaticResource FileEntriesTemplate}" 
      ItemClick="ItemView_ItemClick" 
      IsItemClickEnabled="True" 
      SelectionMode="None" 
      IsSwipeEnabled="false"> 

模板

<DataTemplate x:Key="FileEntriesTemplate"> 
<Grid HorizontalAlignment="Left" Width="400" Height="80" Background="Beige"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="80"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Image Source="{Binding Image}" Stretch="Uniform" Grid.Column="0" Margin="10,0,0,0" AutomationProperties.Name="{Binding Title}"/> 

    <StackPanel Orientation="Vertical" Grid.Column="1" Background="Transparent"> 
     <TextBlock Text="{Binding Title}" Foreground="Black" Style="{StaticResource LargeTitleTextStyle}" Margin="20,20,10,0"/> 
     <TextBlock Text="{Binding Subtitle}" Foreground="gray" Style="{StaticResource CaptionTextStyle}" TextWrapping="NoWrap" Margin="20,10,0,30"/> 
    </StackPanel> 
</Grid> 

回答

4

的GridView通過ItemTemplateSelector屬性,它是你可以創建一個DataTemplateSelector繼承的類公開此。一個例子是我有一個GridView,它有問題和存儲庫綁定到它並且想要爲每個使用不同的數據模板。

我的數據模板選擇看起來像:

public class IssueSummaryTemplateSelector : DataTemplateSelector 
{ 
    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) 
    { 
     return item is IssueGroupViewModel ? IssueTemplate : RepositoryTemplate; 
    } 

    public DataTemplate RepositoryTemplate 
    { 
     get; 
     set; 
    } 

    public DataTemplate IssueTemplate 
    { 
     get; 
     set; 
    } 
} 

我再聲明選擇在XAML分配兩個模板我想使用的庫和問題的資源。

<selectors:IssueSummaryTemplateSelector x:Key="IssueSummarySelector" 
             IssueTemplate="{StaticResource IssueGridZoomedOutTemplate}" 
             RepositoryTemplate="{StaticResource IssueGridRepositoryZoomedOutTemplate}"/> 

然後你可以在你的GridView上使用它。

<GridView ItemTemplateSelector="{StaticResource IssueSummarySelector}" /> 
+0

感謝您的代碼!我使用了您發佈的關鍵字來獲取http://blogs.msdn.com/b/bryanbolling/archive/2012/12/08/how-to-control-the-datatemplateselector-in-windows-store-apps的.aspx – rydgaze

相關問題