简体   繁体   English

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

[英]UWP - ListView Issue, I can't add my search to the list

I have to use a list. 我必须使用清单。

I'm trying to add my searched data to the view list and it's crashing again and again. 我正在尝试将搜索到的数据添加到视图列表中,并且它一次又一次崩溃。

i thing the issue is in list view Thank you. 我认为问题出在列表视图中谢谢。

Error: 错误:

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

XML: 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#: 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);
        }
    }

please help me to slove this issue 请帮助我解决这个问题

You set the ItemsSource to BookLib.ItemCollection.Items in the constructor, means that, all the elements of BookLib.ItemCollection.Items are now items of that listView . 您在构造函数中将ItemsSource设置为BookLib.ItemCollection.Items ,这意味着BookLib.ItemCollection.Items所有元素现在都是该listView项。

So, in the TextChanged event, aren't you trying to add the same Item which is already in the listView ? 因此,在TextChanged事件中,您是否不尝试添加listView已经存在的相同Item?

That's why your app is crashing. 这就是您的应用崩溃的原因。

Solution: Remove this line from the constructor: 解决方案:从构造函数中删除此行:

listView.ItemsSource = BookLib.ItemCollection.Items;

You didn't mention the ViewModel you are using for the listview . 您没有提到用于listview的ViewModel。 I am assuming It's like this: 我假设是这样的:

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

Then you should mention the Data type in the ItemTemplate of your listView like this: 然后,应在listViewItemTemplate中提及数据类型,如下所示:

<ListView.ItemTemplate>
        <DataTemplate x:Name="TableDataTemplate" x:DataType="Book">
            <Grid …………
            </Grid>
        </DataTemplate>
    </ListView.ItemTemplate>

this should solve your problem. 这应该可以解决您的问题。

Note: If you want to let the user search through the BookLib.ItemCollection.Items , consider using an AutoSuggestBox . 注意:如果要让用户搜索BookLib.ItemCollection.Items ,请考虑使用AutoSuggestBox

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM