private static ObservableCollection<Contact> _contacts;
public ObservableCollection<Contact> Contacts
{
get { return _contacts; }
set
{
_contacts = value;
OnPropertyChanged("Contacts");
}
}
此可观察对象传递给另一个实现基本操作的视图模型。
public async void OnSave()
{
Contacts.Add(Contact);
Contacts = Utility.ArrangeContacts(Contacts);
await Navigation.PopAsync();
}
我可以看到新联系人已添加到列表中,但是该列表仍未正确排列。我是否需要手动触发OnProperty更改以刷新“可观察”列表?
答案 0 :(得分:1)
我不确定您要做什么。但是从我收集的代码中,您可以在其他地方更新列表。
据我所知,您将Contacts
引用重置为新的ObservableList
。这会破坏您的数据绑定,从而可能导致UI不会更新。
检索新列表,清除当前的ObservableCollection
并重新填充它。或者,再次设置您的DataBinding
属性,但这将导致重新评估所有绑定。
答案 1 :(得分:0)
来自我的自定义public class NiftyObservableCollection<T> : ObservableRangeCollection<T>
//-----------------------------------------------------------------------------------------------------------
public void ReportItemChange(T item)
//-----------------------------------------------------------------------------------------------------------
{
NotifyCollectionChangedEventArgs args =
new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Replace,
item,
item,
IndexOf(item));
OnCollectionChanged(args);
}
//---------------------------------------------------------------------------------------------------------
public void RefreshRange(int index, IEnumerable<T> collection)
//---------------------------------------------------------------------------------------------------------
{
CheckReentrancy();
var changedItems = collection is List<T> ? (List<T>)collection : new List<T>(collection);
for (var currentIndex = index; currentIndex < changedItems.Count+index; currentIndex++ )
{
try
{
var i = changedItems[currentIndex];
Items.RemoveAt(currentIndex); //remove
Items.Insert(currentIndex, i); //insert new
}
catch
{
break;
}
}
// OnPropertyChanged(new PropertyChangedEventArgs("Count"));
OnPropertyChanged(new PropertyChangedEventArgs("Item[]"));
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, changedItems, changedItems, index));
}