我已经实现了在Single
和Multiple
之间切换的功能ListView
的选择。我创建了触发该开关的AppBarButton
。除了刷新CollecitonViewSource
以外,一切正常。CollectionViewSource未在AppbarButtonPress上更新
在beckend数据被删除一切正常,但ListView
不显示新的数据。
private void MultipleSelectionMode_Click(object sender, RoutedEventArgs e) {
if (ContactsListView.SelectionMode == ListViewSelectionMode.Single) {
//change selection mode to multiple
ContactsListView.SelectionMode = ListViewSelectionMode.Multiple;
//change appbar button icon
MultipleSelectionMode.Icon = new SymbolIcon(Symbol.Delete);
}
else if (ContactsListView.SelectionMode == ListViewSelectionMode.Multiple) {
//remove selected items
List<object> selectedContacts = ContactsListView.SelectedItems.ToList();
foreach (Person person in selectedContacts) {
//remove contact from database
GlobalData.RemoveContact(person);
}
//change selection mode to single
ContactsListView.SelectionMode = ListViewSelectionMode.Single;
//change appbar button icon
MultipleSelectionMode.Icon = new SymbolIcon(Symbol.Bullets);
//new data are in groupingItems but not displayed on the screen
groupingItems = Person.createGrouping(GlobalData.LoadContacts());
}
}
当按下AppBarButton
时调用此方法。 ContactsListView
是这样定义的ListView
:
<ListView
x:Name="ContactsListView"
ItemTemplate="{StaticResource ContactsTemplate}"
SelectionMode="Single"
ItemsSource="{x:Bind ContactsViewSource.View}"
Grid.Row="1">
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate x:DataType="data:GroupingItem">
<TextBlock Text="{x:Bind Key}"
Foreground="Blue"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
我CollectionViewSources
看起来是这样的:
<CollectionViewSource
x:Name="ContactsViewSource"
x:Key="src"
Source="{x:Bind groupingItems, Mode=OneWay}"
IsSourceGrouped="True" />
我知道这是工作,因为我打电话groupingItems = Person.createGrouping(GlobalData.LoadContacts());
多次绑定和数据在每个被刷新案件。它不能只按AppBarButton
。
你知道为什么会发生这种情况吗?
你期待什么结果?因为对我来说,'selectedContacts'似乎是空的,所以你的数据不会改变。原因是你在单一模式和多选模式之间切换时调用了这个代码,但是你应该在选择的项目改变时调用它。 – StepTNT
@StepTNT我编辑了这个问题来回答你的评论。 selectedContacts不为空,从数据库中删除数据并加载新数据。但是这个观点并没有被刷新。 – miskohut