您可以在BindingExpression上使用UpdateTarget並將綁定的Mode設置爲One Time。但是從你的問題看來,你是從後臺線程訪問錯誤列表(收集錯誤消息?),你也可以在綁定上使用EnableCollectionSynchronization來處理這個問題。
如果您可以放棄線程安全要求,則以下操作可以添加跨線程通知。
public class SynchronizedObservableCollection<T> : ObservableCollection<T>
{
private SynchronizationContext synchronizationContext;
public SynchronizedObservableCollection()
{
synchronizationContext = SynchronizationContext.Current;
}
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
{
synchronizationContext.Send((object state) => base.OnCollectionChanged(e), null);
}
protected override void OnPropertyChanged(PropertyChangedEventArgs e)
{
synchronizationContext.Send((object state) => base.OnPropertyChanged(e), null);
}
protected override void ClearItems()
{
synchronizationContext.Send((object state) => base.ClearItems(), null);
}
protected override void InsertItem(int index, T item)
{
synchronizationContext.Send((object state) => base.InsertItem(index, item), null);
}
protected override void MoveItem(int oldIndex, int newIndex)
{
synchronizationContext.Send((object state) => base.MoveItem(oldIndex, newIndex), null);
}
protected override void RemoveItem(int index)
{
synchronizationContext.Send((object state) => base.RemoveItem(index), null);
}
protected override void SetItem(int index, T item)
{
synchronizationContext.Send((object state) => base.SetItem(index, item), null);
}
}
你可以做,通過增加一個私有變量來設置視圖模型的值,然後,如果任何改變都需要進行更新,你可以觸發事件OnPropertyChanged。 –
一種方法是創建自定義標記擴展。這裏人創建延遲綁定http://paulstovell.com/blog/wpf-delaybinding – wiero