Этот элемент «Все» должен быть частью списка, с которым вы связываете свой ListBox.Естественно, вы не можете добавить этот элемент в список DataHolder, поскольку он содержит элементы типа Customer (или аналогичные).Конечно, вы можете добавить «волшебного» покупателя, который всегда действует как «все», но по понятным причинам это серьезный случай запаха дизайна (в конце концов, это список покупателей).
Что выможет сделать, это не связывать напрямую со списком DataHolder, но ввести оболочку.Эта обертка будет вашей ViewModel.Вы должны привязать свой ListBox к списку CustomerListItemViewModel, который представляет либо клиента, либо элемент «Все».
CustomerViewModel
{
string Id { get; private set; }
string Name { get; set; }
public static readonly CustomerViewModel All { get; private set; }
static CustomerViewModel()
{
// set up the one and only "All" item
All = new CustomerViewModel();
All.Name = ResourceStrings.All;
}
private CustomerViewModel()
{
}
public CustomerViewModel(Customer actualCustomer)
{
this.Name = actualCustomer.Name;
this.Id = actualCustomer.Id;
}
}
someOtherViewModel.Customers = new ObservableCollection<CustomerViewModel>();
// add all the wrapping CustomerViewModel instances to the collection
someOtherViewModel.Customers.Add(CustomerViewModel.All);
А затем в вашем коде перетаскивания где-нибудь в ViewModel:
if(tragetCustomerViewModelItem = CustomerViewModel.All)
{
// something was dropped to the "All" item
}
Я мог только что познакомить вас с преимуществами MVVM в WPF.Это экономит вам много хлопот в долгосрочной перспективе.