设置集合后如何更新gridview

设置集合后如何更新gridview,gridview,microsoft-metro,observablecollection,inotifypropertychanged,Gridview,Microsoft Metro,Observablecollection,Inotifypropertychanged,我正在尝试将GridView绑定到集合,并希望在集合设置后更新GridView 我不使用ObservableCollection的原因是,如果集合较大(超过1000个项目,我希望在添加所有项目后显示所有项目),它将阻止UI。 在metro风格的应用程序中,没有可供C#使用的BindingList类,所以我需要实现自己的集合类吗?我试图实现一个继承的类IList和INotifyPropertyChanged 我是这样做的: <GridView x:Name="ItemsGridView" I

我正在尝试将
GridView
绑定到集合,并希望在集合设置后更新
GridView

我不使用
ObservableCollection
的原因是,如果集合较大(超过1000个项目,我希望在添加所有项目后显示所有项目),它将阻止UI。 在metro风格的应用程序中,没有可供C#使用的BindingList类,所以我需要实现自己的集合类吗?我试图实现一个继承的类
IList
INotifyPropertyChanged

我是这样做的:

<GridView x:Name="ItemsGridView" ItemsSource="{Binding viewCollection}"/>

class MyBindingList<T> : IList<T>, INotifyPropertyChanged
{
    private List<Item> _viewCollection = new List<Item>();
    public List<Item> viewCollection 
    { get { return _viewCollection; } set { _viewCollection = value; } }
    public virtual event PropertyChangedEventHandler PropertyChanged;
    public void RaiseChanged()
    {
        this.PropertyChanged(this, new PropertyChangedEventArgs("viewCollection"));
    }
}
MyBindingList<Item> list = new MyBindingList<Item>();
ItemsGridView.DataContext = list;

类MyBindingList:IList,INotifyPropertyChanged
{
私有列表_viewCollection=新列表();
公共列表视图集合
{get{return}viewCollection;}set{{viewCollection=value;}}
公共虚拟事件属性ChangedEventHandler属性Changed;
公共无效提升更改()
{
this.PropertyChanged(这是新的PropertyChangedEventArgs(“viewCollection”);
}
}
MyBindingList=新建MyBindingList();
ItemsGridView.DataContext=列表;

有人能给我一个建议吗?谢谢

在代码中,GridView将其ItemsSource绑定到viewCollection。您缺少的唯一一件事就是为什么它不通知您,那就是RaiseChanged()方法

公共列表视图集合
{get{return{u viewCollection;}set{{u viewCollection=value;RaiseChanged();}}
还有一件事,我不建议在RaiseChange方法中添加string属性。它至少应该接受一个字符串属性名,并将其传递到PropertyChangedEventArgs中

通知/更新XAML中UI控件的理想属性如下所示

public List<Item> viewCollection 
    { get { return _viewCollection; } set { _viewCollection = value; NotifyPropertyChanged("viewCollection"); } }
公共列表视图集合
{get{return}viewCollection;}set{viewCollection=value;NotifyPropertyChanged(“viewCollection”);}
假设您要在ViewModel中的某个位置设置viewCollection。它应该更新GridView

public List<Item> viewCollection 
    { get { return _viewCollection; } set { _viewCollection = value; NotifyPropertyChanged("viewCollection"); } }