私はユーザーにアイテムのコレクションを表示しています。WPFリストボックスの項目を削除する
特定のアイテムをダブルクリックした後、このアイテムをリストから削除します。
私はこのようにデータソースを変更するだけでなく、リスト内の項目を変更するのが好きではないと思います。また、私は1000レコードがある場合、リフレッシュがかなり遅くなることを認識します。
リストボックスから項目を削除するより良い方法はありますか?
データソースを変更したくないのは、私も履歴用に使用する予定だからです。
ダミーデータを設定:アイテムの
private void SetUpData()
{
this.users = new List<UserNames>();
this.users.Add(new UserNames() {Id = 1, UserName = "name 1"});
this.users.Add(new UserNames() { Id = 2, UserName = "name 2" });
this.users.Add(new UserNames() { Id = 3, UserName = "name 3" });
this.users.Add(new UserNames() { Id = 4, UserName = "name 4" });
this.users.Add(new UserNames() { Id = 5, UserName = "name 5" });
this.users.Add(new UserNames() { Id = 6, UserName = "name 6" });
this.users.Add(new UserNames() { Id = 7, UserName = "name 7" });
this.users.Add(new UserNames() { Id = 8, UserName = "name 8" });
this.users.Add(new UserNames() { Id = 9, UserName = "name 9" });
this.users.Add(new UserNames() { Id = 10, UserName = "name 10" });
this.listBox1.DataContext = users;
}
私の方法は、リストから削除されています。
private void listBox1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
UserNames itemToRemove = (UserNames)((ListBox)sender).SelectedItem;
MessageBox.Show(itemToRemove.UserName);
this.listBox1.DataContext = null;
this.users.Remove(itemToRemove); // remove from list
this.listBox1.DataContext = this.users; // update data source
}
マイリストボックスの定義:
<ListBox Grid.Column="1" Grid.Row="1" Name="listBox1" ItemsSource="{Binding}" SelectedValuePath="Id" MouseDoubleClick="listBox1_MouseDoubleClick">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding UserName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>