У меня есть элементы, привязанные к списку, и я реализовал функцию для их удаления, когда они выбраны, и пользователь нажимает клавишу «Удалить». В настоящее время функция удаления напрямую обращается к источнику. Однако я не хочу изменять источник, если пользователь сначала не нажимает кнопку сохранения.Удалить связанные элементы из списка только при нажатии кнопки сохранения пользователя
Как я могу изменить удаление ListBoxItems, чтобы мой источник не обновлялся, пока пользователь не нажмет кнопку?
Список I связываются с
public ObservableCollection<Process> Processes { get; set; }
функция удаления
private void OnDeletePressed(object sender, KeyEventArgs e)
{
if (e.Key == Key.Delete)
{
foreach (Process item in ProcessListBox.SelectedItems.OfType<Process>().ToList())
{
SelectedRobot.Processes.Remove(item);
}
}
}
XAML
<ListBox x:Name="ProcessListBox" ItemsSource="{Binding Processes, UpdateSourceTrigger=Explicit}" KeyDown="OnDeletePressed">
<ListBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding ProcessName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Возможно, у вас есть свойство объекта Process с именем IsDeleted и установлено значение true, когда пользователь нажимает кнопку «Удалить», а затем удаляет элемент из списка, когда пользователь нажимает кнопку «Сохранить»? – Krishna
В дополнение к комментарию от @Krishna вы можете добавить триггер данных к шаблону элемента, который (на основе свойства 'IsDeleted', установленного на' true') устанавливает видимость элемента 'Collapsed' и устанавливает родительский ** ListBoxItem ** свойство 'Focusable' для' false'. Таким образом, элемент «исчезнет» из представления, но все равно будет находиться в списке источников. –
@StevenRands Другим способом будет привязка к ICollectionView и фильтр на IsDeleted. Таким образом, элемент будет удален из коллекции пользовательского интерфейса, но все равно будет присутствовать в исходной коллекции :) – Krishna