Как создать CollectionView для ObservableCollection <T> в Silverlight

Есть, по крайней мере, две библиотеки, которые могут помочь вам достичь этого ...

Они помогут вам контролировать зависимости между полями путем настройки декларативным способом.

8
задан Jon Limjap 23 March 2009 в 03:03
поделиться

3 ответа

К сожалению, ICollectionView только используется для DataGrid в Silverlight 2.0, и его единственной реализацией является ListCollectionView, который является внутренним к Системе. Windows. Средства управления. Данные.

Если Вы не свяжете с DataGrid, то ICollectionView не даст Вам очень, потому что он не используется основными средствами управления (такими как поле списка) насколько я могу сказать, так как он определяется в блоке средств управления Данными а не в ядре.

Это - довольно большая разница для WPF.

Но на грани Вашего вопроса, блок, содержащий DataGrid, действительно имеет реализацию, которая могла бы помочь Вам, если Вы хотите изучить, как это сделано. Худший случай, отражатель является Вашим другом...

1
ответ дан 5 December 2019 в 20:20
поделиться

Один метод должен был бы использовать Преобразователь Значения, если Вы хотите сделать привязку данных к ObservableCollection.

Другой метод должен был бы использовать LINQ в объекте ViewModel CLR, который сделает фильтрацию на основе свойств в ViewModel как это (см. метод внедрения UpdateFilteredStores () внизу):

namespace UnitTests
{
    using System.Collections.Generic;
    using System.Collections.ObjectModel;
    using System.Collections.Specialized;
    using System.ComponentModel;
    using System.Linq;

    public class ViewModel : INotifyPropertyChanged
    {
        private string name;

        public ViewModel()
        {
            this.Stores = new ObservableCollection<string>();

            this.Stores.CollectionChanged += new NotifyCollectionChangedEventHandler(this.Stores_CollectionChanged);

            // TODO: Add code to retreive the stores collection
        }

        #region INotifyPropertyChanged Members

        public event PropertyChangedEventHandler PropertyChanged;

        #endregion

        public ObservableCollection<string> Stores { get; private set; }

        public IEnumerable<string> FilteredStores { get; private set; }

        public string Name 
        { 
            get
            {
                return this.name;
            }

            set
            {
                this.name = value;

                if (this.PropertyChanged != null)
                {
                    this.PropertyChanged(this, new PropertyChangedEventArgs("Name"));
                }

                this.UpdateFilteredStores();
            }
        }

        private void Stores_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            this.UpdateFilteredStores();
        }

        private void UpdateFilteredStores()
        {
            this.FilteredStores = from store in this.Stores
                                  where store.Contains(this.Name)
                                  select store;

            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new PropertyChangedEventArgs("FilteredStores"));
            }
        }
    }
}
1
ответ дан 5 December 2019 в 20:20
поделиться

CollectionViewSource теперь доступен в Silverlight 3. Ознакомьтесь с хорошей статьей об этом здесь .

6
ответ дан 5 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: