所以我有一个问题,我有一个列表视图,当我添加第一个项目时,它会渲染,但是第二个项目不会渲染,但是列表视图所在的面板就像它一样在增长。然后,如果添加了第三项,则第二个和第三个渲染器都将添加。之后,添加的每个新项目都会立即渲染。此问题仅与第二项有关。
XAML:
<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>
背后的代码
列表创建和绑定:
List<FileDownload> wpfDownloads = new List<FileDownload>();
DownloadList.ItemsSource = wpfDownloads;
添加新项目:
wpfDownloads.Add(download);
谢谢
只需使用ObservableCollection<FileDownload>
代替即可List<FileDownload>
。原因ObservableCollection<T>
已实现INotifyCollectionChanged
接口。
INotifyCollectionChanged
通知侦听器动态更改,例如何时添加和删除项目或清除整个列表。
有关您的UI的简单建议:
我建议您创建可调整大小的XAML,而不是静态的。我的意思是不好:
<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>
但是,这样做更好,并且此UI(XAML)可调整大小:
<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>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句