2016-04-02 21 views
1

Bu yüzden bir liste görünümüm var ve ilk öğeyi eklediğimde, ancak ikincisi oluşturmuyor ancak panelde liste görünümü açık yaptıkları gibi büyür. Daha sonra üçüncü bir öğe hem ikinci hem de üçüncü render eklenirse. Bundan sonra, eklenen her yeni öğe anında oluşturulur. Bu sorun sadece ikinci maddedir.Liste görünümündeki ikinci öğe düzgün bir şekilde ilk kez gösterilmiyor

XAML: kodun arkasında

<ListView Name="DownloadList" Background="WhiteSmoke" PreviewMouseLeftButtonUp="DownloadList_PreviewMouseLeftButtonUp" Width="649" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListView.View>     
     <GridView> 
      <GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding Name}"/> 
      <GridViewColumn Width="80" Header="Status" DisplayMemberBinding="{Binding Status}"/> 
      <GridViewColumn Width="60" Header="Size" DisplayMemberBinding="{Binding FormattedSize}"/> 
      <GridViewColumn Width="70" Header="Speed" DisplayMemberBinding="{Binding FormattedSpeed}"/> 
      <GridViewColumn Width="170" Header="Progress"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
          <Grid> 
           <ProgressBar Name ="dlPrgrs" Height ="20" Width="150" Maximum="100" Value="{Binding FormattedProgress}" Foreground="{Binding ForColor}"/> 
           <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ElementName=dlPrgrs, Path=Value, StringFormat={}{0:0}%}"/> 
          </Grid> 
         </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
      <GridViewColumn Width="65" Header="Time Left" DisplayMemberBinding="{Binding FormattedTime}"/> 
      <GridViewColumn Width="60" Header="Peers" DisplayMemberBinding="{Binding Peers}"/> 
     </GridView> 
    </ListView.View> 
</ListView> 

liste oluşturma ve bağlama:

List<FileDownload> wpfDownloads = new List<FileDownload>(); 
DownloadList.ItemsSource = wpfDownloads; 

yeni bir öğe ekleyerek:

wpfDownloads.Add(download); 

sayesinde

cevap

1

List<FileDownload> yerine ObservableCollection<FileDownload> kullanın. Nedeni ObservableCollection<T>, INotifyCollectionChanged arabirimini uygulamıştır.

As MSDN says:

INotifyCollectionChanged gibi bir madde ilave edildi ve çıkarıldı veya bütün listesi temizlenir zaman olduğu gibi dinamik değişiklik dinleyici, bildirir. sizin kullanıcı arayüzü hakkında

Basit tavsiye:

Sana statik değildir, size yeniden boyutlandırılabilir XAML oluşturmak için öneriyoruz. Bunun kötü olduğu anlamına:

<Grid>   
    <ListView HorizontalAlignment="Left" Margin="10"> 
     ...The code omitted for the brevity... 
    </ListView> 
    <Button Margin="50" Name="btn_add" Click="btn_add_Click" Content="Add new item"/> 
</Grid> 

Ancak, daha iyi ve bu UI (XAML) boyutlandırılabilir olup:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="5*"> 
     </RowDefinition> 
    </Grid.RowDefinitions> 
    <ListView HorizontalAlignment="Left"> 
     ...The code omitted for the brevity... 
    </ListView> 
    <Button Grid.Row="1" Name="btn_add" Click="btn_add_Click" Content="Add new item"/> 
</Grid> 
İlgili konular