Вот моя проблема: мне нужно создать DataGrid с динамическими выпадающими списками, используя WPF. Если значение поля со списком уже используется в предыдущих строках, следующие, которые будут добавлены пользователем, не должны содержать уже использованный элемент.
На этом изображении ЭЛЕМЕНТ A не должен появляться в поле со списком второй строки.
У меня нет идей, как это сделать, может ли кто-нибудь показать мне свет?
OBS: DataGrid ItemsSource привязан к ObservableCollection, а DataGridComboBoxColumn ItemsSource является списком.
Благодарность !!!
1 ответ
ItemsSource комбо не обязательно должен быть привязан к ObservableCollection, но он может помочь в зависимости от того, как именно вы это решите.
Когда эта ячейка переходит в режим редактирования, свойство, к которому привязан ItemsSource, получает попадание - так что вы можете возвращать новый список элементов каждый раз, когда попадает в геттер. Вот очень простой пример, чтобы дать вам представление:
public List<string> MyItemsSource
{
get
{
var myNewList = MyMasterList.ToList(); //create a (reference) copy of the master list (the items are not copied though, they remain the same in both lists)
if (PropertyA != null)
myNewList.Remove(PropertyA);
return myNewList;
}
}
Итак, то, что вы создаете и возвращаете, является отфильтрованной версией вашего главного списка всех возможных элементов. LINQ будет вам здесь очень полезен.
В качестве альтернативы вы можете сохранить только одну статическую копию главного списка как ObservableCollection и просто удалять элементы из этой статической копии по мере их выбора (и добавлять их обратно, когда они не выбраны). Какой вариант вы выберете, будет зависеть от того, сколько раз список может быть изменен из-за выбранных элементов и насколько сложно создать список. В прошлом я много раз использовал динамически сгенерированный список, в большинстве случаев этот вариант работает хорошо.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.