[英]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: 然后,应在listView
的ItemTemplate
中提及数据类型,如下所示:
<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.