我已经实现了在Single
的{{1}}和Multiple
选择之间切换的功能。我创建了ListView
来触发该切换。除了AppBarButton
的刷新外,一切正常。
在删除数据时,一切都按预期工作,但CollecitonViewSource
未显示新数据。
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());
。
你知道为什么会这样吗?
答案 0 :(得分:0)
如果要发回用户所做的更改,则在使用x:bind时必须使用TwoWay模式。
Source="{x:Bind groupingItems, Mode=TwoWay}"
x:bind默认模式是一次,如果你使用TwoWay,你将告诉控件每次用户在UI中更改内容时都会更新listview的源数据。
并且您需要使用ObservableCollection而不是List
修改强>
public class BindableSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return value;
}
}
将此转换器与ObservableCollection一起使用