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

时间:2015-07-31 07:59:18

标签: c# listview windows-8.1

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

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

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

我能找到的与此问题类似的唯一帖子是this,但接受的答案对我不起作用。

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

1 个答案:

答案 0 :(得分:0)

可能是necropost。但是,我还是留在这里。

我在WinRT应用上遇到了同样的问题。 我和你曾经绑定到父容器的宽度。然后我删除了这个绑定,并显示了第一个项目。 尝试从DataTemplate中的网格中删除它:

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