Есть, по крайней мере, две библиотеки, которые могут помочь вам достичь этого ...
Они помогут вам контролировать зависимости между полями путем настройки декларативным способом.
К сожалению, ICollectionView только используется для DataGrid в Silverlight 2.0, и его единственной реализацией является ListCollectionView, который является внутренним к Системе. Windows. Средства управления. Данные.
Если Вы не свяжете с DataGrid, то ICollectionView не даст Вам очень, потому что он не используется основными средствами управления (такими как поле списка) насколько я могу сказать, так как он определяется в блоке средств управления Данными а не в ядре.
Это - довольно большая разница для WPF.
Но на грани Вашего вопроса, блок, содержащий DataGrid, действительно имеет реализацию, которая могла бы помочь Вам, если Вы хотите изучить, как это сделано. Худший случай, отражатель является Вашим другом...
Один метод должен был бы использовать Преобразователь Значения, если Вы хотите сделать привязку данных к 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"));
}
}
}
}
CollectionViewSource теперь доступен в Silverlight 3. Ознакомьтесь с хорошей статьей об этом здесь .