我必须使用列表。
我正在尝试将搜索到的数据添加到视图列表中 而且它一次又一次崩溃。
问题是在列表视图中 谢谢。错误:
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);
}
}
请帮助我解决这个问题
答案 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。