Jes*_*rty 7 c# xamarin xamarin.forms
问题:数据更改但ListView不更新
我有一个ListS,其ItemsSource设置为
<ListView ItemsSource="{Binding ContactsGrouped}"
Run Code Online (Sandbox Code Playgroud)
单击按钮时,我更新查询以仅返回包含字母"Je"的记录.我可以看到正确的东西被返回,并且ContactsGrouped正在更新,但UI不会改变.
public ObservableCollection<Grouping<string, Contact>> ContactsGrouped { get; set; }
Run Code Online (Sandbox Code Playgroud)
分组看起来像这样:
public class Grouping<K, T> : ObservableCollection<T>
{
public K Key { get; private set; }
public Grouping ( K key, IEnumerable<T> items )
{
Key = key;
foreach ( var item in items )
this.Items.Add( item );
}
}
Run Code Online (Sandbox Code Playgroud)
鉴于我正在使用ObservableCollections,我希望该列表能够重绘.我错过了一些明显的东西吗
事实证明,虽然实现 INotifyPropertyChanged 在过滤列表时仍然不会更新列表。但是,分解出填充 VM 中列表的代码,然后在 OnTextChanged 方法中调用该代码(随后调用重置 ItemsSource)就可以解决问题。
public void OnTextChanged ( object sender, TextChangedEventArgs e ) {
vm.PopulateContacts( vm.CurrentDataService );
ContactListView.ItemsSource = vm.ContactsGrouped;
}
Run Code Online (Sandbox Code Playgroud)
PopulateContacts 方法看起来像这样(缩写)...
// setup
// Get the data
var sorted =
from contact in contacts
orderby contact.FullName
group contact by contact.FirstInitial
into contactGroup
select new Grouping<string, Contact> ( contactGroup.Key, contactGroup );
contactsGrouped = new ObservableCollection<Grouping<string, Contact>> ( sorted );
Run Code Online (Sandbox Code Playgroud)
这有效,并且相当干净且可测试