CollectionViewSource未在AppbarButtonPress上更新

时间:2016-04-21 07:41:38

标签: xaml win-universal-app windows-10-universal

我已经实现了在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()); } } 时调用此方法。 AppBarButtonContactsListView定义如下:

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());

你知道为什么会这样吗?

1 个答案:

答案 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一起使用