【问题标题】:Second item in listview doesn't render the first time properlylistview 中的第二项第一次未正确呈现
【发布时间】:2016-04-02 16:34:24
【问题描述】:

所以我有一个问题,我有一个列表视图,当我添加它呈现的第一个项目时,但第二个项目没有呈现,但列表视图所在的面板就像它一样增长。之后,如果添加第三个项目,则第二个和第三个渲染。之后,添加的每个新项目都会立即呈现。这个问题只存在于第二项。

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);

谢谢

【问题讨论】:

    标签: c# wpf listview


    【解决方案1】:

    只需使用ObservableCollection&lt;FileDownload&gt; 而不是List&lt;FileDownload&gt;。 因为ObservableCollection&lt;T&gt;已经实现了INotifyCollectionChanged接口。

    As MSDN says:

    INotifyCollectionChanged 通知监听器动态变化,例如 就像添加和删除项目或清除整个列表时一样。

    关于用户界面的简单建议:

    我建议您创建可调整大小的 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>
    

    【讨论】:

      猜你喜欢
      • 2021-08-08
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多