【发布时间】:2018-09-28 04:45:23
【问题描述】:
我正在制作图书馆管理软件。这是 XAML:
<CommandBar Grid.Row="0">
<AppBarButton Icon="Add"
Label="New Book"
Click="NewBook_Click"/>
<AppBarButton Icon="Delete"
Label="Remove a Book"
Click="DeleteBook_Click"/>
</CommandBar>
<GridView x:Name="AllBooks_GridView"
ItemsSource="{x:Bind Path=ViewModel.Books, Mode=OneWay}"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollMode="Enabled"
ScrollViewer.HorizontalScrollMode="Disabled"
Grid.Row="1"
SelectionMode="Multiple">
<GridView.ItemTemplate>
<DataTemplate x:DataType="data:Book">
<StackPanel Margin="10" HorizontalAlignment="Center">
<Image Width="200" Height="200" Source="{x:Bind Path=CoverImageLocation, Mode=OneWay}" />
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<StackPanel>
<TextBlock FontSize="16"
Text="{x:Bind Path=Title, Mode=OneWay}"
TextTrimming="WordEllipsis"/>
<TextBlock FontSize="10"
Text="{x:Bind Path=Author, Mode=OneWay}"
Margin="0, 3, 0, 0"
TextTrimming="WordEllipsis"/>
</StackPanel>
<TextBlock FontSize="20"
Text="{x:Bind Path=Quantity, Mode=OneWay}"
Grid.Column="1"
VerticalAlignment="Bottom"
Margin="20, 0, 0, 0"
HorizontalAlignment="Left"/>
</Grid>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
我想选择多个栏并在按下第二个应用栏按钮时删除它们。这是 DeleteBook_Click 函数:
private void DeleteBook_Click(object sender, RoutedEventArgs e)
{
var books = AllBooks_GridView.SelectedItems;
foreach (var b in books)
{
var book = b as Book;
DataAccess.DeleteBook(book.Title);
ViewModel.Books.Remove(book);
}
}
这是我的应用程序的屏幕截图:
当我点击删除图标时,只有第一本书被删除。虽然这两个都被选中了。我做错了什么?
【问题讨论】:
-
foreach循环是否运行两次?SelectedItems集合是否包含两个条目?你能在方法中放置一个断点并单步执行代码吗?我怀疑当您从Books集合中删除这本书时,数据绑定会导致重新加载和SelectedItems更改。虽然我希望这会导致foreach循环中的异常。 -
另外,激活 Windows ;-)
-
@MartinZikmund 我刚刚调试了代码,有趣的是它并没有引发典型的“在迭代时修改集合”异常,它只是继续处理已经更改的集合。因此,如果您收藏了 8 本书(全部选中),则单击将删除 4 本书,而其余 4 本书仍处于选中状态。
-
@MartinZikmund,我希望我可以。问题是我属于印度中产阶级家庭。我的笔记本电脑花了我 30k 的本国货币。而在印度,Win 10 pro 的价格是 15k。我负担不起。 :(
-
另外,我是一名学生。当我自己挣钱时,我会用合法的 Win 10 @MartinZikmund 构建我的电脑