0

我正在尝试将 a 绑定GridView到集合,并且我想GridView在集合设置后进行更新。

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

我做了这样的事情:

<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;

有人可以给我一个建议吗?谢谢!

4

1 回答 1

0

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

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

还有一件事,我不建议将字符串属性放在您的 RaiseChange 方法上。它至少应该接受一个字符串属性名称并将其传递给 PropertyChangedEventArgs。

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

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

因此,假设您要将 viewCollection 设置在 ViewModel 中的某个位置。它应该更新 GridView。

于 2012-08-01T13:58:57.173 回答