2015-10-07 120 views
1

我想創建一個這樣的網格: enter image description here 我決定使用而不是網格6列表視圖,我的問題是,頁面加載非常緩慢。 下面是代碼(下流):在uwp中高效的列表視圖

我創建用戶控制:

namespace ProjectVea.Support 
{ 
    public sealed partial class Control1: UserControl 
    { 
     public ObservableCollection<Support.Ora> coll { get; private set; } = new ObservableCollection<Support.Ora>(); 

     public Control1() 
     { 
      this.initializeCollection(); 
      this.InitializeComponent();  
     } 

     private void initializeCollection() 
     { 
      Ora ite; 
      for(int i = 0; i < 19; i++) 
      { 
       ite = new Ora(i.ToString()); 
       coll.Add(ite); 
      } 
     } 
    } 
} 

在XAML我簡單地複製列表視圖:

<UserControl> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <StackPanel Grid.Column="0"> 
      <ListView Name="list0" ItemsSource="{x:Bind coll}" SelectionMode="None" ScrollViewer.VerticalScrollBarVisibility="Hidden"> 
       <ListView.ItemContainerStyle> 
        <Style TargetType="ListViewItem"> 
         <Setter Property="HorizontalContentAlignment" Value="Center"/> 
        </Style> 
       </ListView.ItemContainerStyle> 
       <ListView.ItemTemplate> 
        <DataTemplate x:DataType="local:Ora"> 
         <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{x:Bind descrizione}"/> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
     </StackPanel> 
     <StackPanel Grid.Column="1"> 
      <ListView Name="list1" ItemsSource="{x:Bind coll}" SelectionMode="None" ScrollViewer.VerticalScrollBarVisibility="Hidden"> 
       <ListView.ItemContainerStyle> 
        <Style TargetType="ListViewItem"> 
         <Setter Property="HorizontalContentAlignment" Value="Center"/> 
        </Style> 
       </ListView.ItemContainerStyle> 
       <ListView.ItemTemplate> 
        <DataTemplate x:DataType="local:Ora"> 
         <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{x:Bind descrizione}"/> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
     </StackPanel> 
     <StackPanel Grid.Column="2"> 
      <ListView Name="list2" ItemsSource="{x:Bind coll}" SelectionMode="None" ScrollViewer.VerticalScrollBarVisibility="Hidden"> 
       <ListView.ItemContainerStyle> 
        <Style TargetType="ListViewItem"> 
         <Setter Property="HorizontalContentAlignment" Value="Center"/> 
        </Style> 
       </ListView.ItemContainerStyle> 
       <ListView.ItemTemplate> 
        <DataTemplate x:DataType="local:Ora"> 
         <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{x:Bind descrizione}"/> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
     </StackPanel> 
     <StackPanel Grid.Column="3"> 
      <ListView Name="list3" ItemsSource="{x:Bind coll}" SelectionMode="None" ScrollViewer.VerticalScrollBarVisibility="Hidden"> 
       <ListView.ItemContainerStyle> 
        <Style TargetType="ListViewItem"> 
         <Setter Property="HorizontalContentAlignment" Value="Center"/> 
        </Style> 
       </ListView.ItemContainerStyle> 
       <ListView.ItemTemplate> 
        <DataTemplate x:DataType="local:Ora"> 
         <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{x:Bind descrizione}"/> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
     </StackPanel> 
     <StackPanel Grid.Column="4"> 
      <ListView Name="list4" ItemsSource="{x:Bind coll}" SelectionMode="None" ScrollViewer.VerticalScrollBarVisibility="Hidden"> 
       <ListView.ItemContainerStyle> 
        <Style TargetType="ListViewItem"> 
         <Setter Property="HorizontalContentAlignment" Value="Center"/> 
        </Style> 
       </ListView.ItemContainerStyle> 
       <ListView.ItemTemplate> 
        <DataTemplate x:DataType="local:Ora"> 
         <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{x:Bind descrizione}"/> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
     </StackPanel> 
     <StackPanel Grid.Column="5"> 
      <ListView Name="list5" ItemsSource="{x:Bind coll}" SelectionMode="None" ScrollViewer.VerticalScrollBarVisibility="Hidden"> 
       <ListView.ItemContainerStyle> 
        <Style TargetType="ListViewItem"> 
         <Setter Property="HorizontalContentAlignment" Value="Center"/> 
        </Style> 
       </ListView.ItemContainerStyle> 
       <ListView.ItemTemplate> 
        <DataTemplate x:DataType="local:Ora"> 
         <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{x:Bind descrizione}"/> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
     </StackPanel> 
    </Grid> 

</UserControl> 

ORA類:

namespace ProjectVea.Support 
{ 
    public class Ora 
    { 
     public string descrizione { get; set; } 
     public Ora(string descrizione) 
     { 
      this.descrizione = descrizione; 
     } 
    } 
} 

有哪些技術可以最有效地使用xaml?

+0

我有一個的ObservableCollection,每個列表視圖是指收集,所以我想到了使用列表視圖更容易,也比使用一個簡單的網格更有效。 – Andrea485

+2

使用GridView。 –

+0

這個問題還不清楚。但notifiying的UI只有一次可能會有幫助:[查看計算器這個問題(http://stackoverflow.com/questions/13302933/how-to-avoid-firing-observablecollection-collectionchanged-multiple-times-when-r)。 – ventiseis

回答

1

爲什麼不嘗試這樣的事情

<ListView ItemsSource="{Binding Items}"> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapGrid MaximumRowsOrColumns="6" Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="Name" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView>