Могу ли я предложить провести исследование по использованию шаблона проектирования MVVM? Если вы сделаете это, вы найдете более чистый способ справиться с этим и другими сценариями. Например, предположим, у вас есть EntityObject
человек (я полагаю, что вы используете EF), который вы хотите отобразить в списке и удалить, нажав кнопку. Сначала мы создадим ListBox, который будет содержать список:
<ListBox x:Name="lst" DisplayMemberPath="Name" SelectionMode="Extended">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
Здесь вы указываете, что хотите отображать в списке (DisplayMemberPath
), и привязываете выбор ListBox к свойству IsSelected объекта Person.
Тогда мы можем пойти дальше и связать ObservableCollection<Person>
с этим ListBox:
//in code behind constructor, but should actually be in a ViewModel
var people = new ObservableCollection<Person>
{
new Person(false, "test1"),
new Person(true, "test2"),
new Person(true, "test3"),
};
lst.ItemsSource = people;
//Person class for completeness
public class Person
{
public Person(bool isSelected, string name)
{
IsSelected = isSelected;
Name = name;
}
public bool IsSelected { get; set; }
public string Name { get; set; }
}
а затем убрать предметы при нажатии кнопки:
public void deleteClick(sender, args){
var deleteme = people.Where(p => p.IsSelected).ToList();
DoDeleteLogicInDB(deleteme);
deleteme.ForEach(p => people.Remove(p));
//remove it from the observablecollection, and the view will automatically update.
}
Надеюсь, это укажет вам правильное направление!