绑定ObservableCollection

时间:2013-12-30 00:02:54

标签: c# wpf

如何解决更改收藏内容的问题?

一种方法是清除集合并使用foreach循环添加新内容。集合必须在运行时更改,因为有时我会添加50万个元素,这需要很长时间,而且我无法接受。

试试时  _myObservableCollection = new ObservableCollection<T>(_anotherCollection); 绑定到视图已被破坏(引用旧集合)

有可能解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

如果在分配新集合后破坏了对视图的绑定,则应正确实现集合属性的INotifyPropertyChanged

编辑:示例

// implement the interface on your viewmodel
public class ExampleViewModel : INotifyPropertyChanged
{        
    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private ObservableCollection<UIElement> collectionBackingField;

    public  ObservableCollection<UIElement> Collection
    {
        get { return collectionBackingField; }
        set
        {
           if(value != collectionBackingField)
           {
              collectionBackingField = value;

              // call the method that notifies all observers of the changes
              NotifyPropertyChanged();
           }
        }
    }
 }

请注意,现在,用户界面需要知道的有关的所有更改必须通过该属性。不从代码中的任何位置手动设置私人支持字段。