UWP-ListView问题,我无法将搜索添加到列表中

时间:2018-07-08 16:06:42

标签: c# uwp uwp-xaml

我必须使用列表。

我正在尝试将搜索到的数据添加到视图列表中 而且它一次又一次崩溃。

问题是在列表视图中 谢谢。

错误:

  

System.Exception:'灾难性失败(来自HRESULT的异常:   0x8000FFFF(E_UNEXPECTED))'

XML:

        <ListView  x:Name="listView" Grid.ColumnSpan="5" Grid.RowSpan="5" Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Top" Height="421" Width="711" Margin="0,93,0,0" Grid.Column="1">
        <ListView.HeaderTemplate>
            <DataTemplate>
                <Grid Padding="12" Background="{ThemeResource SystemBaseLowColor}">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="200"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Text="Name" Style="{ThemeResource CaptionTextBlockStyle}"/>
                    <TextBlock Grid.Column="1" Text="Publisher" Style="{ThemeResource CaptionTextBlockStyle}"/>
                    <TextBlock Grid.Column="2" Text="PublishDate" Style="{ThemeResource CaptionTextBlockStyle}"/>
                    <TextBlock Grid.Column="3" Text="Quantity" Style="{ThemeResource CaptionTextBlockStyle}"/>
                    <TextBlock Grid.Column="4" Text="Category" Style="{ThemeResource CaptionTextBlockStyle}"/>
                    <TextBlock Grid.Column="5" Text="Price" Style="{ThemeResource CaptionTextBlockStyle}"/>
                </Grid>
            </DataTemplate>
        </ListView.HeaderTemplate>
        <ListView.ItemTemplate>
            <DataTemplate x:Name="TableDataTemplate">
                <Grid Height="48" AutomationProperties.Name="{Binding Name}">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="0"/>
                        <ColumnDefinition Width="200"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                        <ColumnDefinition Width="100"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock x:Name="nameTbx" Grid.Column="1" VerticalAlignment="Center" Text="{Binding Name}" />
                    <TextBlock Grid.Column="2" VerticalAlignment="Center" Text="{Binding model.Publisher}"/>
                    <TextBlock Grid.Column="3" VerticalAlignment="Center" Text="{Binding model.PublishDate}"/>
                    <TextBlock Grid.Column="4" VerticalAlignment="Center" Text="{Binding model.Quantity}"/>
                    <TextBlock Grid.Column="5" VerticalAlignment="Center" Text="{Binding model.Category}"/>
                    <TextBlock Grid.Column="6" VerticalAlignment="Center" Text="{Binding model.Price}"/>

                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

c#:

 {
    public MainPage()
    {
        this.InitializeComponent();


        listView.ItemsSource = BookLib.ItemCollection.Items;   


    }


    private void searchTbx_TextChanged(object sender, TextChangedEventArgs e)
    {
        var match = BookLib.ItemCollection.Items.Find(x => x.Name.ToLower() == searchTbx.Text.ToLower());
        if (match != null)
        {
            listView.Items.Add(match.Name);
        }
    }

请帮助我解决这个问题

1 个答案:

答案 0 :(得分:2)

您在构造函数中将ItemsSource设置为BookLib.ItemCollection.Items,这意味着BookLib.ItemCollection.Items的所有元素现在都是该listView的项。

因此,在TextChanged事件中,您是否不尝试添加listView中已经存在的相同Item?

这就是您的应用崩溃的原因。

解决方案: 从构造函数中删除此行:

listView.ItemsSource = BookLib.ItemCollection.Items;

您没有提到listview使用的ViewModel。我假设是这样的:

public class Book
{
    public string Name { get; set; }
    public string Publisher { get; set; }
    ………
    ………
    ………
}

然后您应该像这样在ItemTemplate的{​​{1}}中提及数据类型:

listView

这应该可以解决您的问题。

注意: 如果要让用户搜索<ListView.ItemTemplate> <DataTemplate x:Name="TableDataTemplate" x:DataType="Book"> <Grid ………… </Grid> </DataTemplate> </ListView.ItemTemplate> ,请考虑使用AutoSuggestBox