Вот как это происходит. У меня есть модель представления, в которой я вызываю веб-клиент и заполняю наблюдаемую коллекцию элементами. Мне нужно иметь два разных списка на двух разных страницах, но с одним и тем же ItemsSource из модели представления. Как я могу ограничить количество элементов в одном из двух списков, не затрагивая другой? Я попытался использовать .Take(limit) в модели представления, где создаются элементы, но это влияет на оба списка.
Обновлять
Модель представления
public class MainViewModel : INotifyPropertyChanged
{
public MainViewModel()
{
this.Items = new ObservableCollection<ItemViewModel>();
this.Mainlist = new CollectionViewSource();
}
public ObservableCollection<ItemViewModel> Items { get; private set; }
public CollectionViewSource Mainlist { get; set; }
void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
try
{
...............
//Ignore the dummy data in foreach loop. Just for showcase.
foreach (var item in Items)
{
//Items creation
this.Items.Add(new ItemViewModel()
{ LineOne = item });
}
this.Mainlist.Source = App.ViewModel.Items;
this.Mainlist.Filter += (s, a) =>
a.Accepted = App.ViewModel.Items.IndexOf((ItemViewModel)a.Item) < 10;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
.....................
}
На стороне взгляда
public MainPage()
{
InitializeComponent();
DataContext = App.ViewModel;
list.ItemsSource = App.ViewModel.Mainlist.View;
}
Обновление 2
Еще один вариант, который я нашел (без использования CollectionViewSource
), это сделать новый public ObservableCollection<ItemViewModel> Mainlist { get; private set; }
и использовать еще один
foreach (var item in Items.Take(limit))
{
//Items creation
this.Mainlist.Add(new ItemViewModel()
{ LineOne = item });
}
для заполнения ObservableCollection и привязки списка к Mainlist. Это работает, но я также думаю, что это плохая практика, потому что таким образом я дублирую данные. Любые идеи по этому поводу?
ObservableCollection
имеет методIndexOf
. В чем ошибка? 07.07.2012myList.IndexOf((ItemViewModel)a.Item)
. 07.07.2012