第一次绑定时,Windows 8列表视图第一项不显示

本文关键字:一项 显示 视图 定时 绑定 Windows 列表 第一次 | 更新日期: 2023-09-27 18:05:38

我绑定到一个listview,但是当我第一次绑定时,第一个项目没有显示。它在列表中,如果我点击我知道它应该在哪里(在顶部),我可以使用该数据,所以唯一的问题是显示它。请注意,此问题仅在第一次绑定列表时出现。

从下面的代码中可以看到,我在输入的第三个字符上绑定了listview,这就是我遇到问题的时候。一旦输入第四个字符,所有匹配结果都显示出来,如果我删除第三个字符(因此没有绑定任何内容),然后重新输入a字符,列表将显示所有匹配结果。

<TextBox x:Name="txtSupName" SelectionChanged="txtSupName_SelectionChanged" Style="{StaticResource DefaultTextbox}"/>
<ListView x:Name="lvFilteredSuppliers" Margin="0,50,0,0" Height="200" SelectionChanged="lvFilteredSuppliers_SelectionChanged">
<ListView.ItemTemplate>
    <DataTemplate>
        <Grid Width="{Binding ElementName=lvFilteredSuppliers, Path=ActualWidth}">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="410" />
                <ColumnDefinition Width="100" />
                <ColumnDefinition Width="200" />
                <ColumnDefinition Width="200" />
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Column="0" Text="{Binding SupplierName}" />
            <TextBlock Grid.Column="1" Text="{Binding SupplierCode}" />
            <TextBlock Grid.Column="2" Text="{Binding SupplierTown}" />
            <TextBlock Grid.Column="3" Text="{Binding SupplierCountry}" />
        </Grid>
    </DataTemplate>
</ListView.ItemTemplate>
</ListView>

    private void txtSupName_SelectionChanged(object sender, RoutedEventArgs e)
    {
        //only start checking when there are more than 2 charaters entered
        if (txtSupName.Text.Length > 2)
        {
            //select all suppliers that match with user input
            var filteredSuppliers = Suppliers.Where(l => l.SupplierName.ToLower().StartsWith(txtSupName.Text.ToLower()));
            //filteredSuppliers passed to observable collection so listView will update on each change
            ObservableCollection<SupplierLocal> filteredSuppliersCollection = new ObservableCollection<SupplierLocal>(filteredSuppliers);
            //sets the source for the listview
            lvFilteredSuppliers.ItemsSource = filteredSuppliersCollection;
            //shows grid
            gridListViewContainer.Visibility = Visibility.Visible;
        }
        else
        {
            //hides grid
            gridListViewContainer.Visibility = Visibility.Collapsed;
        }
    }

我能找到的唯一一个类似这个问题的帖子是这个,但公认的答案不适合我。

为什么我的问题发生了,我如何解决它?

第一次绑定时,Windows 8列表视图第一项不显示

可能是尸岗。但是,我还是把它留在这里。

我在WinRT应用程序上有同样的问题。我和你一样习惯于绑定父容器的宽度。然后我删除这个绑定,显示第一个项目。尝试从DataTemplate内的网格中删除它:

Width="{Binding ElementName=lvFilteredSuppliers, Path=ActualWidth}"