これがその方法です。Web クライアントを呼び出して、監視可能なコレクションに項目を設定するビューモデルがあります。2 つの異なるページに 2 つの異なるリストボックスが必要ですが、ビューモデルから同じ ItemsSource が必要です。2 つのリストボックスの一方にあるアイテムの数を、他方に影響を与えずに制限するにはどうすればよいですか? アイテムが作成されているビューモデルに .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; }
もう1つ使用することです
foreach (var item in Items.Take(limit))
{
//Items creation
this.Mainlist.Add(new ItemViewModel()
{ LineOne = item });
}
ObservableCollection にデータを入力し、リストボックスを Mainlist にバインドするため。それは機能していますが、そのようにしてデータを複製しているため、それは悪い習慣だと思います。それに関するアイデアはありますか?